summaryrefslogtreecommitdiffstats
path: root/elab.sml
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2024-04-27 08:28:40 -0700
committerRose Hogenson <rosehogenson@posteo.net>2024-04-27 08:28:40 -0700
commit9f5889c1263d63b953b3a324da07321deef5ca58 (patch)
treeeb4a9be038660ced671da9fbb4617812f7cd2125 /elab.sml
parentAdd tests for let. (diff)
downloadsml-9f5889c1263d63b953b3a324da07321deef5ca58.tar.zst
Add integer arithmetic.
Diffstat (limited to 'elab.sml')
-rw-r--r--elab.sml6
1 files changed, 5 insertions, 1 deletions
diff --git a/elab.sml b/elab.sml
index 52d0089..cc73c98 100644
--- a/elab.sml
+++ b/elab.sml
@@ -5,6 +5,10 @@ struct
fun primop (s : string) : Syntax.primop =
case s of
"exit" => Syntax.PExit
+ | "add" => Syntax.PAdd
+ | "sub" => Syntax.PSub
+ | "mul" => Syntax.PMul
+ | "div" => Syntax.PDiv
| _ => raise Fail ("invalid op: " ^ s)
fun elab (env : int StringMap.map) (p : Syntax.expr) : Syntax.lexp =
@@ -41,7 +45,7 @@ struct
end
| Syntax.ECase (expr, []) => raise Fail "nonexhaustive match"
| Syntax.ECase (expr, (pat, body) :: rest) =>
- if rest <> [] then raise Fail "redundant match" else
+ if not (null rest) then raise Fail "redundant match" else
let val v = Gensym.new () in
case pat of
Syntax.PWild => Syntax.LApp (Syntax.LFn (v, elab env body), elab env expr)