summaryrefslogtreecommitdiffstats
path: root/syntax.sml
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2024-04-07 09:11:28 -0700
committerRose Hogenson <rosehogenson@posteo.net>2024-04-07 09:11:28 -0700
commit278ee46f0fa93a3db4ebdc6878fcd9b1d990094a (patch)
tree85cd7b4703cacea8111ea05766089ca73aac9abb /syntax.sml
parentSupport function arguments. (diff)
downloadsml-278ee46f0fa93a3db4ebdc6878fcd9b1d990094a.tar.zst
Add tests and fix variables.
Diffstat (limited to 'syntax.sml')
-rw-r--r--syntax.sml14
1 files changed, 8 insertions, 6 deletions
diff --git a/syntax.sml b/syntax.sml
index 2a7ee9a..3e70ba1 100644
--- a/syntax.sml
+++ b/syntax.sml
@@ -24,8 +24,9 @@ struct
| EOrElse of expr * expr
| ELet of dec list * expr
| ELambda of pat * expr
+ | ECase of expr * (pat * expr) list
- and dec = DVal of expr
+ and dec = DVal of pat * expr
(* Lambda language *)
type var = int
@@ -106,11 +107,12 @@ struct
| EOrElse (a, b) => "EOrElse (" ^ self a ^ ", " ^ self b ^ ")"
| ELet (decs, e) => "ELet (" ^ multilineListToString decToStringI indent decs ^ ", " ^ self e ^ ")"
| ELambda (pat, e) => "ELambda (" ^ patToString pat ^ ", " ^ exprToStringI indent e ^ ")"
+ | ECase (e, branches) => "ECase (" ^ self e ^ ", " ^ multilineListToString (fn indent => fn (pat, body) => "(" ^ patToString pat ^ ", " ^ exprToStringI indent body ^ ")") indent branches ^ ")"
end
and decToStringI (indent : string) (x : dec) : string =
case x of
- DVal e => "DVal (" ^ exprToStringI indent e ^ ")"
+ DVal (p, e) => "DVal (" ^ patToString p ^ ", " ^ exprToStringI indent e ^ ")"
val exprToString : expr -> string = exprToStringI ""
@@ -154,11 +156,11 @@ struct
fun opcodeToString (oper : opcode) : string =
case oper of
- OAlloc (r, s) => "OAlloc (" ^ Int.toString r ^ ", " ^ valueToString s ^ ")"
+ OAlloc (r, s) => "Var " ^ Int.toString r ^ " = OAlloc(" ^ valueToString s ^ ")"
| OCall => "OCall"
- | OPoke (i, p, v) => "OPoke (" ^ Int.toString i ^ ", " ^ Int.toString p ^ ", " ^ valueToString v ^ ")"
- | OPeek (r, i, p) => "OPeek (" ^ Int.toString r ^ ", " ^ Int.toString i ^ ", " ^ valueToString p ^ ")"
- | OShuf (d, s) => "OShuf (" ^ Int.toString d ^ ", " ^ valueToString s ^ ")"
+ | OPoke (i, p, v) => "Var " ^ Int.toString p ^ "[" ^ Int.toString i ^ "] = " ^ valueToString v
+ | OPeek (r, i, p) => "Var " ^ Int.toString r ^ " = " ^ valueToString p ^ "[" ^ Int.toString i ^ "]"
+ | OShuf (d, s) => "Var " ^ Int.toString d ^ " = " ^ valueToString s
| OExit v => "OExit " ^ valueToString v
| OLabel l => "OLabel " ^ Int.toString l
end