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".
@@ -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));
