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
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
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