X-Git-Url: https://ruin.nu/git/?p=proglang.git;a=blobdiff_plain;f=Interpret.hs;fp=Interpret.hs;h=0e3928587d30ecb247b6833adc4a28ffaff1840f;hp=1938e55308263f3076063e629d8e12d998f17f21;hb=8687a7c6790e959242228d64c8c513771565f8c1;hpb=a884c2547196fe8f9d6135747ca3701f9b13e4de diff --git a/Interpret.hs b/Interpret.hs index 1938e55..0e39285 100644 --- a/Interpret.hs +++ b/Interpret.hs @@ -52,21 +52,13 @@ eval (EFunc i as) = do vs <- mapM eval as state <- get (ds,ss) <- lookup i $ functions state - modify (\s -> s{variables=[empty]}) - addParams vs ds + let m = foldr (\((Decl t i),v) m -> insert i v m) empty $ zip ds vs + in modify (\s -> s{variables=[m]}) mapM_ execute ss `catchError` (\_ -> return ()) - put state v <- lift $ takeMVar $ ret state + put state return v -addParams :: [Value] -> [Decl] -> StateT State IO () -addParams [] [] = return () -addParams (v:vs) ((Decl t i):ds) = do - state <- get - let (m:ms) = variables state in modify (\s -> s{variables=insert i v m:ms }) - addParams vs ds - - getWord :: IO String getWord = do c <- getChar