add newStdEnv
This commit is contained in:
parent
014567f61b
commit
89ee63597b
12
Interp.hs
12
Interp.hs
|
@ -100,6 +100,11 @@ l >$ r = error $ "cannot > " ++ show l ++ " and " ++ show r
|
||||||
l ==$ r = BoolV (l == r)
|
l ==$ r = BoolV (l == r)
|
||||||
l !=$ r = BoolV (l /= r)
|
l !=$ r = BoolV (l /= r)
|
||||||
|
|
||||||
|
toDict :: M.Map String Value -> Value
|
||||||
|
toDict m =
|
||||||
|
let wrapped = map (\(k,v) -> (StrV k, v)) $ M.toAscList m in
|
||||||
|
DictV $ M.fromAscList wrapped
|
||||||
|
|
||||||
-- some built-in functions
|
-- some built-in functions
|
||||||
|
|
||||||
_fputbytes (TupleV [StreamV h, StrV str]) = do
|
_fputbytes (TupleV [StreamV h, StrV str]) = do
|
||||||
|
@ -178,6 +183,12 @@ _loop args@(TupleV [fn@(FnV _ _), arg]) = do
|
||||||
_loop $ TupleV [fn, v]
|
_loop $ TupleV [fn, v]
|
||||||
else return arg
|
else return arg
|
||||||
|
|
||||||
|
-- returns a dictionary of a new environment with only the standard
|
||||||
|
-- default-imported functions
|
||||||
|
_newStdEnv (TupleV []) = do
|
||||||
|
let (_,[stdEnv]) = initialState
|
||||||
|
return $ toDict stdEnv
|
||||||
|
|
||||||
-- import a module name as a module
|
-- import a module name as a module
|
||||||
_Import (StrV modname) = do
|
_Import (StrV modname) = do
|
||||||
(h,env) <- get -- save current state
|
(h,env) <- get -- save current state
|
||||||
|
@ -223,6 +234,7 @@ initialState = ([stdout, stdin],
|
||||||
("fopen", Builtin $ BIF _fopen),
|
("fopen", Builtin $ BIF _fopen),
|
||||||
("sockopen", Builtin $ BIF _sockopen),
|
("sockopen", Builtin $ BIF _sockopen),
|
||||||
("itos", Builtin $ BIF _itos),
|
("itos", Builtin $ BIF _itos),
|
||||||
|
("newStdEnv", Builtin $ BIF _newStdEnv),
|
||||||
("import", Builtin $ BIF _Import)]])
|
("import", Builtin $ BIF _Import)]])
|
||||||
|
|
||||||
eval :: AST -> InterpState Value
|
eval :: AST -> InterpState Value
|
||||||
|
|
Loading…
Reference in New Issue