summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMura Li <mural@ctli.io>2021-07-05 13:39:04 +0000
committerMura Li <mural@ctli.io>2021-07-05 13:39:04 +0000
commitf5175435a735fa8cdcd28995d5f3e32faf792945 (patch)
tree08828eaf708a3450fde0775b43144d5999667576
parente3682d0bb7437dc3cbb6a6fcf8d82806d98c73da (diff)
downloadmc-f5175435a735fa8cdcd28995d5f3e32faf792945.tar.gz
mi/match: fix dtree construction order of or-pattern
When we have a match statement such as match x | `std.Some _ || _: ;; the order of the patterns `std.seom _ and _ matters. before the fix, we would get false positive of "pattern matched by earlier case". Signed-off-by: Mura Li <mural@ctli.io>
-rw-r--r--mi/match.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/mi/match.c b/mi/match.c
index afd3e46..e3855e0 100644
--- a/mi/match.c
+++ b/mi/match.c
@@ -464,8 +464,8 @@ addrec(Frontier *fs, Node *pat, Node *val, Path *path)
next->hasorpat = 1;
fs->next = next;
fs->hasorpat = 1;
- addrec(fs, pat->expr.args[1], val, path);
- addrec(next, pat->expr.args[0], val, path);
+ addrec(fs, pat->expr.args[0], val, path);
+ addrec(next, pat->expr.args[1], val, path);
break;
case Ogap:
lappend(&fs->slot, &fs->nslot, mkslot(path, pat, val));