From fc7f2d08c1801ee6ab0d8b27ad70d9fe08f6760d Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Thu, 21 Nov 2019 12:55:38 +0100 Subject: Change builtinMap to Set --- Compiler.hs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'Compiler.hs') diff --git a/Compiler.hs b/Compiler.hs index f973afa..3a85ae0 100644 --- a/Compiler.hs +++ b/Compiler.hs @@ -72,7 +72,7 @@ data CompState = CompState , csCurrent :: Int , csScopes :: [Map.Map Name ScopeItem] , csDefines :: Map.Map Name Ref - , csBuiltins :: Map.Map Name () + , csBuiltins :: Set.Set Name , csFunctions :: Map.Map Name GlobFuncDef , csDatas :: [Value] } deriving Show @@ -84,17 +84,17 @@ newtype CM a = CM {unCM :: StateT CompState (Except String) a} deriving (Functor, Applicative, Monad, MonadState CompState, MonadError String) -- TODO: extra info like number of arguments, dunno, might be useful -builtinMap :: Map.Map Name () -builtinMap = Map.fromList [ - ("+", ()), ("-", ()), ("<=", ()), ("=", ()), ("print", ()), - ("list", ()), ("car", ()), ("cdr", ()), ("null?", ()), - ("sys-open-file", ()), ("sys-close-file", ()), ("sys-get-char", ()), ("sys-put-string", ())] +builtinSet :: Set.Set Name +builtinSet = Set.fromList [ + "+", "-", "<=", "=", "print", + "list", "car", "cdr", "null?", + "sys-open-file", "sys-close-file", "sys-get-char", "sys-put-string"] bbId :: BB -> Int bbId (BB i _ _) = i initState :: CompState -initState = CompState 0 Map.empty undefined [] Map.empty builtinMap Map.empty [] +initState = CompState 0 Map.empty undefined [] Map.empty builtinSet Map.empty [] runCM :: CM a -> Either String a runCM act = runExcept $ evalStateT (unCM act) initState @@ -295,7 +295,7 @@ genTValue (TVName name _) nextnext = do Left SIGlobal -> do funcs <- gets csFunctions builtins <- gets csBuiltins - case (Map.lookup name funcs, Map.lookup name builtins) of + case (Map.lookup name funcs, name `Set.member` builtins) of (Just (GlobFuncDef _ _ []), _) -> addIns (r, IAssign (RSClo name)) (Just (GlobFuncDef _ _ cs), _) -> do refs <- foldM (\refs' cname -> do @@ -305,7 +305,7 @@ genTValue (TVName name _) nextnext = do return (r' : refs')) [] cs addIns (r, IAllocClo name refs) - (_, Just ()) -> addIns (r, IAssign (RSClo name)) + (_, True) -> addIns (r, IAssign (RSClo name)) _ -> throwError $ "Use of undefined name \"" ++ name ++ "\"" setTerm $ IJmp nextnext return r -- cgit v1.2.3-54-g00ecf