CSPM-Interpreter-0.4.4.1: src/CSPM/Interpreter.hs
----------------------------------------------------------------------------
-- |
-- Module : CSPM.Interpreter
-- Copyright : (c) Fontaine 2008 - 2011
-- License : BSD3
--
-- Maintainer : Fontaine@cs.uni-duesseldorf.de
-- Stability : experimental
-- Portability : GHC-only
--
-- An API for the Interpreter.
--
----------------------------------------------------------------------------
module CSPM.Interpreter
(
runFile
,evalTest
,getSigma
,prepareAST
,runInterpreter
,runInterpreterP
,module CSPM.Interpreter.Types
,module CSPM.Interpreter.Bindings
)
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 Data.IntMap as IntMap
-- | Run the interpreter for a given module and top-level identifier.
runInterpreter :: AST.Module INT -> AST.UniqueIdent -> (Value, Env)
runInterpreter ast entry
= (getLetBindings env IntMap.! AST.uniqueIdentId entry, env)
where
env = evalModule ast
-- | Run the interpreter for a given module and top-level identifier.
-- Cast result to a process
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