]> ruin.nu Git - proglang.git/blobdiff - Typecheck.hs
typechecker seems to work for function calls
[proglang.git] / Typecheck.hs
index 18146506a227857ce792198ba9e8575491c7f553..bfef73a68a318cc46188649474881eab2760c4d0 100644 (file)
@@ -50,6 +50,20 @@ typeCheckExp (ENeg e) = do
 typeCheckExp (ENot e) = do
        TBool <- typeCheckExp e
        return TBool
+typeCheckExp (EFunc i as) = do
+       state <- get
+       (t,ts) <- lookup i $ functions state
+       checkParams as ts
+       return t
+
+checkParams :: (MonadState State m) => [Exp] -> [Type] -> m ()
+checkParams [] [] = return ()
+checkParams [] _ = fail "Too for arguments when calling function" 
+checkParams _ [] = fail "Too many arguments when calling function" 
+checkParams (e:es) (t:ts) = do
+       t2 <- typeCheckExp e
+       assert (t == t2) "Arugments does not match"
+       checkParams es ts
 
 typeCheckVar :: (MonadState State m) => Ident -> m Type 
 typeCheckVar i = do