diff options
Diffstat (limited to 'elab.sml')
| -rw-r--r-- | elab.sml | 14 |
1 files changed, 1 insertions, 13 deletions
@@ -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 |
