src/Tools/Haskell/Haskell.thy
changeset 71692 f8e52c0152fe
parent 71490 3488c0eb4cc8
child 73177 9288ac2eda12
equal deleted inserted replaced
71691:d682b4000a77 71692:f8e52c0152fe
  1713       case Value.parse_nat (UTF8.toString line) of
  1713       case Value.parse_nat (UTF8.toString line) of
  1714         Nothing -> return $ Just line
  1714         Nothing -> return $ Just line
  1715         Just n -> fmap trim_line . fst <$> read_block socket n
  1715         Just n -> fmap trim_line . fst <$> read_block socket n
  1716 \<close>
  1716 \<close>
  1717 
  1717 
  1718 generate_file "Isabelle/Standard_Thread.hs" = \<open>
  1718 generate_file "Isabelle/Isabelle_Thread.hs" = \<open>
  1719 {-  Title:      Isabelle/Standard_Thread.hs
  1719 {-  Title:      Isabelle/Isabelle_Thread.hs
  1720     Author:     Makarius
  1720     Author:     Makarius
  1721     LICENSE:    BSD 3-clause (Isabelle)
  1721     LICENSE:    BSD 3-clause (Isabelle)
  1722 
  1722 
  1723 Standard thread operations.
  1723 Isabelle-specific thread management.
  1724 
  1724 
  1725 See \<^file>\<open>$ISABELLE_HOME/src/Pure/Concurrent/standard_thread.ML\<close>
  1725 See \<^file>\<open>$ISABELLE_HOME/src/Pure/Concurrent/isabelle_thread.ML\<close>
  1726 and \<^file>\<open>$ISABELLE_HOME/src/Pure/Concurrent/standard_thread.scala\<close>.
  1726 and \<^file>\<open>$ISABELLE_HOME/src/Pure/Concurrent/isabelle_thread.scala\<close>.
  1727 -}
  1727 -}
  1728 
  1728 
  1729 {-# LANGUAGE NamedFieldPuns #-}
  1729 {-# LANGUAGE NamedFieldPuns #-}
  1730 
  1730 
  1731 module Isabelle.Standard_Thread (
  1731 module Isabelle.Isabelle_Thread (
  1732   ThreadId, Result,
  1732   ThreadId, Result,
  1733   find_id,
  1733   find_id,
  1734   properties, change_properties,
  1734   properties, change_properties,
  1735   add_resource, del_resource, bracket_resource,
  1735   add_resource, del_resource, bracket_resource,
  1736   is_stopped, expose_stopped, stop,
  1736   is_stopped, expose_stopped, stop,
  1910 import qualified System.IO as IO
  1910 import qualified System.IO as IO
  1911 
  1911 
  1912 import Isabelle.Library
  1912 import Isabelle.Library
  1913 import qualified Isabelle.UUID as UUID
  1913 import qualified Isabelle.UUID as UUID
  1914 import qualified Isabelle.Byte_Message as Byte_Message
  1914 import qualified Isabelle.Byte_Message as Byte_Message
  1915 import qualified Isabelle.Standard_Thread as Standard_Thread
  1915 import qualified Isabelle.Isabelle_Thread as Isabelle_Thread
  1916 
  1916 
  1917 
  1917 
  1918 {- server address -}
  1918 {- server address -}
  1919 
  1919 
  1920 localhost_name :: String
  1920 localhost_name :: String
  1951       return (server_socket, UUID.bytes password)
  1951       return (server_socket, UUID.bytes password)
  1952 
  1952 
  1953     loop :: Socket -> ByteString -> IO ()
  1953     loop :: Socket -> ByteString -> IO ()
  1954     loop server_socket password = forever $ do
  1954     loop server_socket password = forever $ do
  1955       (connection, _) <- Socket.accept server_socket
  1955       (connection, _) <- Socket.accept server_socket
  1956       Standard_Thread.fork_finally
  1956       Isabelle_Thread.fork_finally
  1957         (do
  1957         (do
  1958           line <- Byte_Message.read_line connection
  1958           line <- Byte_Message.read_line connection
  1959           when (line == Just password) $ handle connection)
  1959           when (line == Just password) $ handle connection)
  1960         (\finally -> do
  1960         (\finally -> do
  1961           Socket.close connection
  1961           Socket.close connection