ref: 52e1e5f1b71f08e62aa60f7bc061554878cd48a0
parent: 49c4706703a9e3cebc6ea39e8bf4ba0f6a1d43ab
author: Ori Bernstein <[email protected]>
date: Sun Apr 3 20:25:53 EDT 2016
Fix matching. TODO: understand why. The appending of the start state shoudl be a bug.
--- a/mi/match.c
+++ b/mi/match.c
@@ -287,9 +287,9 @@
ret = 0;
last = NULL;
nlast = 0;
- lappend(&last, &nlast, start);
switch (ty->type) {
case Tytuple:
+ lappend(&last, &nlast, start);
for (i = 0; i < ty->nsub; i++) {
next = nextnode(loc, i, ty->nsub, accept);
tail = NULL;
@@ -303,6 +303,7 @@
}
break;
case Tyarray:
+ lappend(&last, &nlast, start);
asize = fold(ty->asize, 1);
nelt = asize->expr.args[0]->lit.intval;
for (i = 0; i < nelt; i++) {
@@ -318,6 +319,7 @@
}
break;
case Tystruct:
+ lappend(&last, &nlast, start);
for (i = 0; i < ty->nmemb; i++) {
next = nextnode(loc, i, ty->nmemb, accept);
tail = NULL;
@@ -331,6 +333,7 @@
}
break;
case Tyunion:
+ lappend(&last, &nlast, start);
for (i = 0; i < ty->nmemb; i++) {
uc = ty->udecls[i];
next = dtbytag(start, uc);
@@ -354,6 +357,7 @@
lappend(&last, &nlast, accept);
break;
case Typtr:
+ lappend(&last, &nlast, start);
ret = addwildrec(loc, ty->sub[0], start, accept, &last, &nlast);
break;
default: