More anonymous unions.

This commit is contained in:
rsc 2004-03-25 23:24:04 +00:00
parent 35d95baea2
commit 285b4f85c0
4 changed files with 31 additions and 31 deletions

View file

@ -96,7 +96,7 @@ loop:
case Tcase: case Tcase:
if(c >= 0 && c < 256) if(c >= 0 && c < 256)
if(r1 = r->cases[c]) if(r1 = r->u.cases[c])
follow[nfollow++] = r1; follow[nfollow++] = r1;
if(r = r->next) if(r = r->next)
goto loop; goto loop;
@ -104,7 +104,7 @@ loop:
case Talt: case Talt:
case Tor: case Tor:
fol1(r->alt, c); fol1(r->u.alt, c);
r = r->next; r = r->next;
goto loop; goto loop;
@ -119,7 +119,7 @@ loop:
break; break;
case Tclass: case Tclass:
if(c >= r->lo && c <= r->hi) if(c >= r->u.x.lo && c <= r->u.x.hi)
follow[nfollow++] = r->next; follow[nfollow++] = r->next;
break; break;
} }

View file

@ -36,9 +36,9 @@ struct Re
{ {
Rune lo; Rune lo;
Rune hi; Rune hi;
}; } x;
Rune val; /* char */ Rune val; /* char */
}; } u;
Re* next; Re* next;
}; };

View file

@ -66,14 +66,14 @@ expr3:
{ {
$$.beg = ral(Talt); $$.beg = ral(Talt);
patchnext($1.end, $$.beg); patchnext($1.end, $$.beg);
$$.beg->alt = $1.beg; $$.beg->u.alt = $1.beg;
$$.end = $$.beg; $$.end = $$.beg;
$$.beg = $1.beg; $$.beg = $1.beg;
} }
| expr3 LQUES | expr3 LQUES
{ {
$$.beg = ral(Talt); $$.beg = ral(Talt);
$$.beg->alt = $1.beg; $$.beg->u.alt = $1.beg;
$$.end = $1.end; $$.end = $1.end;
appendnext($$.end, $$.beg); appendnext($$.end, $$.beg);
} }
@ -82,8 +82,8 @@ expr4:
LCHAR LCHAR
{ {
$$.beg = ral(Tclass); $$.beg = ral(Tclass);
$$.beg->lo = $1; $$.beg->u.x.lo = $1;
$$.beg->hi = $1; $$.beg->u.x.hi = $1;
$$.end = $$.beg; $$.end = $$.beg;
} }
| LBEGIN | LBEGIN

View file

@ -63,11 +63,11 @@ countor(Re *r)
loop: loop:
switch(r->type) { switch(r->type) {
case Tor: case Tor:
n += countor(r->alt); n += countor(r->u.alt);
r = r->next; r = r->next;
goto loop; goto loop;
case Tclass: case Tclass:
return n + r->hi - r->lo + 1; return n + r->u.x.hi - r->u.x.lo + 1;
} }
return n; return n;
} }
@ -80,7 +80,7 @@ oralloc(int t, Re *r, Re *b)
if(b == 0) if(b == 0)
return r; return r;
a = ral(t); a = ral(t);
a->alt = r; a->u.alt = r;
a->next = b; a->next = b;
return a; return a;
} }
@ -93,13 +93,13 @@ case1(Re *c, Re *r)
loop: loop:
switch(r->type) { switch(r->type) {
case Tor: case Tor:
case1(c, r->alt); case1(c, r->u.alt);
r = r->next; r = r->next;
goto loop; goto loop;
case Tclass: /* add to character */ case Tclass: /* add to character */
for(n=r->lo; n<=r->hi; n++) for(n=r->u.x.lo; n<=r->u.x.hi; n++)
c->cases[n] = oralloc(Tor, r->next, c->cases[n]); c->u.cases[n] = oralloc(Tor, r->next, c->u.cases[n]);
break; break;
default: /* add everything unknown to next */ default: /* add everything unknown to next */
@ -125,13 +125,13 @@ addcase(Re *r)
n = countor(r); n = countor(r);
if(n >= Caselim) { if(n >= Caselim) {
a = ral(Tcase); a = ral(Tcase);
a->cases = mal(256*sizeof(*a->cases)); a->u.cases = mal(256*sizeof(*a->u.cases));
case1(a, r); case1(a, r);
for(i=0; i<256; i++) for(i=0; i<256; i++)
if(a->cases[i]) { if(a->u.cases[i]) {
r = a->cases[i]; r = a->u.cases[i];
if(countor(r) < n) if(countor(r) < n)
a->cases[i] = addcase(r); a->u.cases[i] = addcase(r);
} }
return a; return a;
} }
@ -139,7 +139,7 @@ addcase(Re *r)
case Talt: case Talt:
r->next = addcase(r->next); r->next = addcase(r->next);
r->alt = addcase(r->alt); r->u.alt = addcase(r->u.alt);
return r; return r;
case Tbegin: case Tbegin:
@ -223,7 +223,7 @@ re2star(Re2 a)
Re2 c; Re2 c;
c.beg = ral(Talt); c.beg = ral(Talt);
c.beg->alt = a.beg; c.beg->u.alt = a.beg;
patchnext(a.end, c.beg); patchnext(a.end, c.beg);
c.end = c.beg; c.end = c.beg;
return c; return c;
@ -235,7 +235,7 @@ re2or(Re2 a, Re2 b)
Re2 c; Re2 c;
c.beg = ral(Tor); c.beg = ral(Tor);
c.beg->alt = b.beg; c.beg->u.alt = b.beg;
c.beg->next = a.beg; c.beg->next = a.beg;
c.end = b.end; c.end = b.end;
appendnext(c.end, a.end); appendnext(c.end, a.end);
@ -248,8 +248,8 @@ re2char(int c0, int c1)
Re2 c; Re2 c;
c.beg = ral(Tclass); c.beg = ral(Tclass);
c.beg->lo = c0 & 0xff; c.beg->u.x.lo = c0 & 0xff;
c.beg->hi = c1 & 0xff; c.beg->u.x.hi = c1 & 0xff;
c.end = c.beg; c.end = c.beg;
return c; return c;
} }
@ -274,15 +274,15 @@ loop:
case Tcase: case Tcase:
print("case ->%p\n", a->next); print("case ->%p\n", a->next);
for(i=0; i<256; i++) for(i=0; i<256; i++)
if(a->cases[i]) { if(a->u.cases[i]) {
for(j=i+1; j<256; j++) for(j=i+1; j<256; j++)
if(a->cases[i] != a->cases[j]) if(a->u.cases[i] != a->u.cases[j])
break; break;
print(" [%.2x-%.2x] ->%p\n", i, j-1, a->cases[i]); print(" [%.2x-%.2x] ->%p\n", i, j-1, a->u.cases[i]);
i = j-1; i = j-1;
} }
for(i=0; i<256; i++) for(i=0; i<256; i++)
reprint1(a->cases[i]); reprint1(a->u.cases[i]);
break; break;
case Tbegin: case Tbegin:
@ -294,13 +294,13 @@ loop:
break; break;
case Tclass: case Tclass:
print("[%.2x-%.2x] ->%p\n", a->lo, a->hi, a->next); print("[%.2x-%.2x] ->%p\n", a->u.x.lo, a->u.x.hi, a->next);
break; break;
case Tor: case Tor:
case Talt: case Talt:
print("| %p ->%p\n", a->alt, a->next); print("| %p ->%p\n", a->u.alt, a->next);
reprint1(a->alt); reprint1(a->u.alt);
break; break;
} }
a = a->next; a = a->next;