---------------------------------------------------------------------------- -- | -- Module : CSPM.Interpreter -- Copyright : (c) Fontaine 2008 -- License : BSD -- -- Maintainer : Fontaine@cs.uni-duesseldorf.de -- Stability : experimental -- Portability : GHC-only -- -- An API for the Interpreter. -- ---------------------------------------------------------------------------- module CSPM.Interpreter ( runFile ,evalTest ,getAllEvents ,prepareAST ,runInterpreter ,runInterpreterP ,module CSPM.Interpreter.Types ,module CSPM.Interpreter.Bindings ,module CSPM.Interpreter.CoreInstances ) where import CSPM.Interpreter.Types import CSPM.Interpreter.CoreInstances () import CSPM.Interpreter.Bindings import CSPM.Interpreter.Eval import CSPM.Interpreter.Hash (hs) import CSPM.Interpreter.PrepareAST import CSPM.Interpreter.Test.CLI import Language.CSPM.AST as AST import Data.IntMap as IntMap -- | Run the interpreter for a given module and top-level identifier. runInterpreter :: AST.LModule -> AST.UniqueIdent -> (Value,Env) runInterpreter ast entry = (getLetBindings env IntMap.! AST.uniqueIdentId entry ,env) where env = processDeclList (hs "TopLevelEnvirionment") emptyEnvirionment $ AST.moduleDecls $ unLabel ast -- | Run the interpreter for a given module and top-level identifier. -- Cast result to a process runInterpreterP :: AST.LModule -> AST.UniqueIdent -> (Process,Env) runInterpreterP ast entry = case val of VProcess x -> (x,env) _ -> throwTypingError "entrypoint is not a CSPM-process" (Just $ AST.bindingLoc entry) $ Just val where env = processDeclList (hs "TopLevelEnvirionment") emptyEnvirionment $ AST.moduleDecls $ unLabel ast val :: Value val = (IntMap.!) (getLetBindings env) $ AST.uniqueIdentId entry