summaryrefslogtreecommitdiffstats
path: root/elab.sml
diff options
context:
space:
mode:
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