fix escapes in literal strings
[cc1516.git] / gen.icl
diff --git a/gen.icl b/gen.icl
index 082c34d..53a1de7 100644 (file)
--- a/gen.icl
+++ b/gen.icl
@@ -160,11 +160,14 @@ instance g Expr where
     g (VarExpr _ (VarDef k fs)) = getAdressbook >>= \ab->case 'Map'.get k ab of
                Just (ADDR t) = tell [Instr "ldl" [Lit t] ""] >>| mapM_ g fs >>| pure ()
                _ = liftT (Left $ Error "Higher order functions not implemented")
-    g (FunExpr _ k es fs) = 
-               mapM_ g es
-               >>| jump "bsr" k
-        >>| mapM_ (const $ tell [Instr "ajs" [Lit -1] ""]) es //clean up args
-               >>| tell [Instr "ldr" [Raw "RR"] ""]
+    g (FunExpr _ k es fs) = getAdressbook >>= \ab->case 'Map'.get k ab of
+               Just (LAB l arity) = if (arity <> (length es))
+                       (liftT $ Left $ Error "Higher order functions not implemented")
+                       (       mapM_ g es
+                               >>| jump "bsr" k
+                       >>| mapM_ (const $ tell [Instr "ajs" [Lit -1] ""]) es //clean up args
+                               >>| tell [Instr "ldr" [Raw "RR"] ""])
+               _ = liftT (Left $ Error "Funcall to variable?")
 
 jump :: String String -> Gen ()
 jump instr k = getAdressbook >>= \ab->case 'Map'.get k ab of