summaryrefslogtreecommitdiffstats
path: root/elab.sml
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2024-10-05 15:06:40 -0700
committerRose Hogenson <rosehogenson@posteo.net>2024-10-05 15:06:40 -0700
commitc854a69bc985759d3238a0ef1b9aaa75db8da979 (patch)
tree546a7505a76b143a78f0645686063c80bc4be6dd /elab.sml
parent4fe42be07b7b57147f9cac0d17c2611f71f0758a (diff)
downloadsml-c854a69bc985759d3238a0ef1b9aaa75db8da979.tar.zst
Fix constructors in parser.sml.
Diffstat (limited to 'elab.sml')
-rw-r--r--elab.sml14
1 files changed, 1 insertions, 13 deletions
diff --git a/elab.sml b/elab.sml
index 33f1a10..84b99a9 100644
--- a/elab.sml
+++ b/elab.sml
@@ -186,18 +186,6 @@ struct
in (patterns, occurrences, actions)
end
- (* There's ambiguity between pattern variables and constructors that can only
- * be resolved by looking up each pattern variable in the constructors map *)
- fun fixConstructors (env : env) (expr : Syntax.pat) =
- case expr of
- Syntax.PTuple t => Syntax.PTuple (map (fixConstructors env) t)
- | Syntax.PVar v =>
- if isSome (lookupCon [v] env)
- then Syntax.PCon ([v], Syntax.PTuple [])
- else Syntax.PVar v
- | Syntax.PCon (s, p) => Syntax.PCon (s, fixConstructors env p)
- | _ => expr
-
fun compilePatternMatching (env : env) ([] : Syntax.pat list list, _ : Syntax.lexp list, _ : Syntax.lexp list) : Syntax.lexp =
raise Fail "nonexhaustive match"
| compilePatternMatching env (patterns as firstRow :: rows, occurrences, actions) =
@@ -297,7 +285,6 @@ struct
and elabCase (env : env) (expr : Syntax.lexp) (arms : (Syntax.pat * Syntax.expr) list) =
let
- val arms = map (fn (p, e) => (fixConstructors env p, e)) arms
val patterns = transpose (patternMatrix (map (fn (x, _) => x) arms))
val occurrences = occurrenceVector expr (map (fn (x, _) => x) arms)
val actions = actionVector env expr arms
@@ -331,6 +318,7 @@ struct
| go _ [] _ = raise Fail "go empty"
in go env accessors s
end
+ | Syntax.EIdent [] => raise Fail "invalid syntax"
| Syntax.EBuiltin builtin => Syntax.LPrim (primop builtin)
| Syntax.EInt i => Syntax.LInt i
| Syntax.EStr s => Syntax.LString s