module CSPM.Interpreter
(
runFile
,evalString
,evalFile
,getSigma
,prepareAST
,runInterpreter
,runInterpreterP
,module CSPM.Interpreter.Types
,module CSPM.Interpreter.Bindings
,interpreterVersion
)
where
import CSPM.Interpreter.Types
import CSPM.Interpreter.CoreInstances ()
import CSPM.Interpreter.Bindings
import CSPM.Interpreter.Eval
import CSPM.Interpreter.PrepareAST
import CSPM.Interpreter.Test.CLI
import Language.CSPM.AST as AST
import Paths_CSPM_Interpreter (version)
import Data.Version (Version)
import Data.IntMap as IntMap
interpreterVersion :: Version
interpreterVersion = version
runInterpreter :: AST.Module INT -> AST.UniqueIdent -> (Value, Env)
runInterpreter ast entry
= (getLetBindings env IntMap.! AST.uniqueIdentId entry, env)
where
env = evalModule ast
runInterpreterP :: AST.Module INT -> 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 (val, env) = runInterpreter ast entry