]> granicus.if.org Git - re2c/commitdiff
- Fixed #1479044 incorrect code generated when using -b.
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 1 May 2006 17:50:38 +0000 (17:50 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 1 May 2006 17:50:38 +0000 (17:50 +0000)
CHANGELOG
code.cc
htdocs/index.html
test/bug1479044.b.c [new file with mode: 0755]
test/bug1479044.b.re [new file with mode: 0755]
test/bug1479044.c [new file with mode: 0755]
test/bug1479044.re [new file with mode: 0755]
test/bug1479044.s.c [new file with mode: 0755]
test/bug1479044.s.re [new file with mode: 0755]

index 9cc9e4100298d3bf654f66f112cc0b3476d4a679..b7ac8feed0eada761a0c7588de981d46952a067c 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -14,6 +14,7 @@ Version 0.10.2 (2006-??-??)
 - Changed to not generate yyaccept code unless needed.
 - Changed to use if- instead of switch-expression when yyaccpt has only one case.
 - Added docu, examples and tests to .src.zip package (0.10.1 zip was repackaged).
+- Fixed #1479044 incorrect code generated when using -b.
 - Fixed #1454253 Piece of code saving a backtracking point not generated.
 - Fixed #1463639 Missing forward declaration.
 - Implemented #1187127 savable state support for multiple re2c blocks.
diff --git a/code.cc b/code.cc
index 25ea82e270ff6db2b4f5e11e58098973aae13b4b..2ca271a38825e7a0abd1c7fc2dc64c1c69a76951 100644 (file)
--- a/code.cc
+++ b/code.cc
@@ -208,20 +208,34 @@ void BitMap::gen(std::ostream &o, uint ind, uint lb, uint ub)
 {
        BitMap *b = first;
 
-       if (b)
+       if (b && bLastPass)
        {
                o << indent(ind) << "static unsigned char yybm[] = {";
-               uint n = ub - lb;
-               uint *bm = new uint[n];
-               memset(bm, 0, n*sizeof(uint));
 
-               for (uint i = 0; b; i += n)
+               uint c = 1, n = ub - lb;
+
+               while((b = const_cast<BitMap*>(b->next)) != NULL) {
+                       ++c;
+               }
+               b = first;
+
+               uint *bm = new uint[n];
+               
+               for (uint i = 0, t = 0; b; i += n)
                {
-                       for (uint m = 0x80; b && m; b = const_cast<BitMap*>(b->next), m >>= 1)
+                       memset(bm, 0, n * sizeof(uint));
+
+                       for (uint m = 0x80; b && m; m >>= 1)
                        {
                                b->i = i;
                                b->m = m;
                                doGen(b->go, b->on, bm, lb, m);
+                               b = const_cast<BitMap*>(b->next);
+                       }
+
+                       if (c > 8)
+                       {
+                               o << "\n" << indent(ind+1) << "/* table " << ++t << ": " << i << " */";
                        }
 
                        for (uint j = 0; j < n; ++j)
@@ -244,6 +258,9 @@ void BitMap::gen(std::ostream &o, uint ind, uint lb, uint ub)
                }
 
                o << "\n" << indent(ind) << "};\n";
+               /* stats(); */
+               
+               delete[] bm;
        }
 }
 
index 8fb8c03fc3aefd653ab7956f9b7e96b6d517baad..c1c38f957814d63b1cb617bbb538c142cf42905a 100755 (executable)
@@ -92,6 +92,7 @@ provide re2c packages.</li>
 <li>Changed to not generate yyaccept code unless needed.</li>
 <li>Changed to use if- instead of switch-expression when yyaccpt has only one case.</li>
 <li>Added docu, examples and tests to .src.zip package (0.10.1 zip was repackaged).</li>
+<li>Fixed #1479044 incorrect code generated when using -b.</li>
 <li>Fixed #1454253 Piece of code saving a backtracking point not generated.</li>
 <li>Fixed #1463639 Missing forward declaration.</li>
 <li>Implemented #1187127 savable state support for multiple re2c blocks.</li>
diff --git a/test/bug1479044.b.c b/test/bug1479044.b.c
new file mode 100755 (executable)
index 0000000..bf825fe
--- /dev/null
@@ -0,0 +1,1241 @@
+/* Generated by re2c */
+#line 1 "bug1479044.b.re"
+#define NULL ((char*) 0)
+#define YYCTYPE char
+#define YYCURSOR p
+#define YYLIMIT p
+#define YYMARKER q
+#define YYFILL(n)
+
+#include <stdio.h>
+
+char *scan281(char *p)
+{
+       char *q;
+start:
+{
+       static unsigned char yybm[] = {
+               /* table 1: 0 */
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170,   0, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 210,  12, 170, 
+               234, 234, 234, 234, 234, 234, 234, 234, 
+               234, 234, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 234, 234, 234, 234, 234, 234, 234, 
+               234, 234, 234, 234, 170, 169, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               170, 170, 170, 170, 170, 170, 170, 170, 
+               /* table 2: 256 */
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128,   0, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               192, 192, 192, 192, 192, 192, 192, 192, 
+               192, 192, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128,   0, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+               128, 128, 128, 128, 128, 128, 128, 128, 
+       };
+
+#line 87 "<stdout>"
+       {
+               YYCTYPE yych;
+               unsigned int yyaccept = 0;
+
+               if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+               yych = *YYCURSOR;
+               if(yych <= 'f') {
+                       if(yych <= 'a') {
+                               if(yych <= '/') {
+                                       if(yych <= 0x00) goto yy16;
+                                       goto yy15;
+                               } else {
+                                       if(yych <= '9') goto yy14;
+                                       if(yych <= '`') goto yy15;
+                               }
+                       } else {
+                               if(yych <= 'c') {
+                                       if(yych <= 'b') goto yy4;
+                                       goto yy5;
+                               } else {
+                                       if(yych <= 'd') goto yy6;
+                                       if(yych <= 'e') goto yy7;
+                                       goto yy8;
+                               }
+                       }
+               } else {
+                       if(yych <= 'q') {
+                               if(yych <= 'l') {
+                                       if(yych <= 'k') goto yy15;
+                                       goto yy9;
+                               } else {
+                                       if(yych == 'p') goto yy10;
+                                       goto yy15;
+                               }
+                       } else {
+                               if(yych <= 'v') {
+                                       if(yych <= 'r') goto yy13;
+                                       if(yych <= 'u') goto yy15;
+                                       goto yy11;
+                               } else {
+                                       if(yych == 'x') goto yy12;
+                                       goto yy15;
+                               }
+                       }
+               }
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych == 'd') goto yy172;
+yy3:
+#line 32 "bug1479044.b.re"
+               {
+               goto start;
+       }
+#line 141 "<stdout>"
+yy4:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych == 'd') goto yy170;
+               goto yy3;
+yy5:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych == 'd') goto yy168;
+               goto yy3;
+yy6:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych <= 'n') {
+                       if(yych == 'h') goto yy154;
+                       goto yy3;
+               } else {
+                       if(yych <= 'o') goto yy153;
+                       if(yych == 's') goto yy155;
+                       goto yy3;
+               }
+yy7:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych == 'd') goto yy151;
+               goto yy3;
+yy8:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych == 'd') goto yy149;
+               goto yy3;
+yy9:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych == 'd') goto yy147;
+               goto yy3;
+yy10:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych <= 'p') {
+                       if(yych <= 'n') goto yy3;
+                       if(yych <= 'o') goto yy137;
+                       goto yy136;
+               } else {
+                       if(yych == 'r') goto yy135;
+                       goto yy3;
+               }
+yy11:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych == 'd') goto yy133;
+               goto yy3;
+yy12:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych == 's') goto yy108;
+               goto yy3;
+yy13:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yych == 'h') goto yy71;
+               goto yy3;
+yy14:
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if(yybm[256+yych] & 64) {
+                       goto yy20;
+               }
+               if(yych == '-') goto yy18;
+               goto yy3;
+yy15:
+               yych = *++YYCURSOR;
+               goto yy3;
+yy16:
+               ++YYCURSOR;
+#line 37 "bug1479044.b.re"
+               {
+               return NULL;
+       }
+#line 221 "<stdout>"
+yy18:
+               yych = *++YYCURSOR;
+               if(yych <= '/') goto yy19;
+               if(yych <= '9') goto yy22;
+yy19:
+               YYCURSOR = YYMARKER;
+               switch(yyaccept) {
+               case 3: goto yy132;
+               case 2: goto yy107;
+               case 1: goto yy63;
+               case 0: goto yy3;
+               }
+yy20:
+               ++YYCURSOR;
+               if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+               yych = *YYCURSOR;
+               if(yybm[256+yych] & 64) {
+                       goto yy20;
+               }
+               if(yych == '-') goto yy18;
+               goto yy19;
+yy22:
+               ++YYCURSOR;
+               if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+               yych = *YYCURSOR;
+               if(yych == '-') goto yy24;
+               if(yych <= '/') goto yy19;
+               if(yych <= '9') goto yy22;
+               goto yy19;
+yy24:
+               yych = *++YYCURSOR;
+               if(yych <= '/') goto yy19;
+               if(yych >= ':') goto yy19;
+yy25:
+               ++YYCURSOR;
+               if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+               yych = *YYCURSOR;
+               if(yych == '-') goto yy27;
+               if(yych <= '/') goto yy19;
+               if(yych <= '9') goto yy25;
+               goto yy19;
+yy27:
+               yych = *++YYCURSOR;
+               if(yych <= '/') goto yy19;
+               if(yych >= ':') goto yy19;
+yy28:
+               ++YYCURSOR;
+               if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+               yych = *YYCURSOR;
+               if(yych == '.') goto yy30;
+               if(yych <= '/') goto yy19;
+               if(yych <= '9') goto yy28;
+               goto yy19;
+yy30:
+               yych = *++YYCURSOR;
+               if(yych == 'b') goto yy34;
+               if(yych != 'd') goto yy33;
+               yych = *++YYCURSOR;
+               if(yych == 'h') goto yy69;
+               goto yy33;
+yy32:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+yy33:
+               if(yybm[256+yych] & 128) {
+                       goto yy32;
+               }
+               if(yych <= 'l') goto yy19;
+               goto yy35;
+yy34:
+               yych = *++YYCURSOR;
+               if(yych == 'o') goto yy64;
+               goto yy33;
+yy35:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 1) {
+                       goto yy35;
+               }
+               if(yych == 0x0A) goto yy19;
+               if(yych != 'o') goto yy32;
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 1) {
+                       goto yy35;
+               }
+               if(yych == 0x0A) goto yy19;
+               if(yych != 'd') goto yy32;
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 1) {
+                       goto yy35;
+               }
+               if(yych == 0x0A) goto yy19;
+               if(yych != 'e') goto yy32;
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[256+yych] & 128) {
+                       goto yy32;
+               }
+               if(yych <= 'l') goto yy19;
+yy40:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'l') {
+                       if(yych == 0x0A) goto yy19;
+               } else {
+                       if(yych <= 'm') goto yy40;
+                       if(yych == 'o') goto yy46;
+               }
+yy42:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 2) {
+                       goto yy42;
+               }
+               if(yych <= '-') goto yy19;
+               if(yych >= '/') goto yy40;
+yy44:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'l') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'm') goto yy40;
+                       if(yych == 'w') goto yy49;
+                       goto yy42;
+               }
+yy46:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'c') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'd') goto yy47;
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+yy47:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'd') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'e') goto yy48;
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+yy48:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 2) {
+                       goto yy42;
+               }
+               if(yych <= '-') goto yy19;
+               if(yych <= '.') goto yy44;
+               goto yy40;
+yy49:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= '`') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'a') goto yy50;
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+yy50:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'l') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'm') goto yy40;
+                       if(yych != 's') goto yy42;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'g') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'h') goto yy52;
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+yy52:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'h') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'i') goto yy53;
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+yy53:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'l') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'm') goto yy40;
+                       if(yych >= 'o') goto yy42;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'f') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'g') goto yy55;
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+yy55:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'l') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'm') goto yy40;
+                       if(yych != 't') goto yy42;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'l') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'm') goto yy40;
+                       if(yych != 'o') goto yy42;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'l') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'm') goto yy40;
+                       if(yych >= 'o') goto yy42;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 2) {
+                       goto yy42;
+               }
+               if(yych <= '-') goto yy19;
+               if(yych >= '/') goto yy40;
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'e') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= 'd') goto yy42;
+               } else {
+                       if(yych <= 'm') {
+                               if(yych <= 'l') goto yy42;
+                               goto yy40;
+                       } else {
+                               if(yych == 'w') goto yy49;
+                               goto yy42;
+                       }
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'c') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'd') goto yy61;
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+yy61:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 4) {
+                       goto yy44;
+               }
+               if(yych <= 'l') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy42;
+               } else {
+                       if(yych <= 'm') goto yy40;
+                       if(yych != 'u') goto yy42;
+               }
+               yyaccept = 1;
+               YYMARKER = ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 2) {
+                       goto yy42;
+               }
+               if(yych <= '-') goto yy63;
+               if(yych <= '.') goto yy44;
+               goto yy40;
+yy63:
+#line 27 "bug1479044.b.re"
+               {
+               return "edu";
+       }
+#line 600 "<stdout>"
+yy64:
+               yych = *++YYCURSOR;
+               if(yych != 't') goto yy33;
+               yych = *++YYCURSOR;
+               if(yych != 'h') goto yy33;
+               yych = *++YYCURSOR;
+               if(yych != 'e') goto yy33;
+               yych = *++YYCURSOR;
+               if(yych != 'l') goto yy33;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy42;
+               goto yy33;
+yy69:
+               yych = *++YYCURSOR;
+               if(yych != 'c') goto yy33;
+               yych = *++YYCURSOR;
+               if(yych == 'p') goto yy42;
+               goto yy33;
+yy71:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 8) {
+                       goto yy71;
+               }
+               if(yych <= ',') goto yy19;
+yy73:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 16) {
+                       goto yy73;
+               }
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '/') goto yy71;
+               if(yych >= ':') goto yy71;
+yy75:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= ',') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy71;
+               } else {
+                       if(yych <= '-') goto yy77;
+                       if(yych <= '/') goto yy71;
+                       if(yych <= '9') goto yy75;
+                       goto yy71;
+               }
+yy77:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 16) {
+                       goto yy73;
+               }
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '/') goto yy71;
+               if(yych >= ':') goto yy71;
+yy78:
+               ++YYCURSOR;
+               if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy71;
+                       goto yy77;
+               } else {
+                       if(yych <= '.') goto yy80;
+                       if(yych <= '/') goto yy71;
+                       if(yych <= '9') goto yy78;
+                       goto yy71;
+               }
+yy80:
+               yych = *++YYCURSOR;
+               if(yych != '.') goto yy82;
+yy81:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+yy82:
+               if(yybm[0+yych] & 32) {
+                       goto yy81;
+               }
+               if(yych <= ',') goto yy19;
+               if(yych >= '.') goto yy85;
+yy83:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych <= '/') goto yy81;
+                       if(yych <= '9') goto yy87;
+                       goto yy81;
+               }
+yy85:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych == 'r') goto yy92;
+                       goto yy81;
+               }
+yy87:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych <= '/') goto yy81;
+                       if(yych <= '9') goto yy87;
+                       goto yy81;
+               }
+yy89:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych <= '/') goto yy81;
+                       if(yych >= ':') goto yy81;
+               }
+yy90:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy89;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych <= '/') goto yy81;
+                       if(yych <= '9') goto yy90;
+                       goto yy81;
+               }
+yy92:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 'e') goto yy81;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 's') goto yy81;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 'n') goto yy81;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 'e') goto yy81;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 't') goto yy81;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 32) {
+                       goto yy81;
+               }
+               if(yych <= ',') goto yy19;
+               if(yych <= '-') goto yy83;
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '.') {
+                       if(yych <= 0x0A) {
+                               if(yych <= 0x09) goto yy81;
+                               goto yy19;
+                       } else {
+                               if(yych <= ',') goto yy81;
+                               if(yych <= '-') goto yy83;
+                               goto yy85;
+                       }
+               } else {
+                       if(yych <= 'p') {
+                               if(yych <= 'o') goto yy81;
+                       } else {
+                               if(yych == 'r') goto yy92;
+                               goto yy81;
+                       }
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 'i') goto yy81;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 't') goto yy81;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 't') goto yy81;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 32) {
+                       goto yy81;
+               }
+               if(yych <= ',') goto yy19;
+               if(yych <= '-') goto yy83;
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '.') {
+                       if(yych <= 0x0A) {
+                               if(yych <= 0x09) goto yy81;
+                               goto yy19;
+                       } else {
+                               if(yych <= ',') goto yy81;
+                               if(yych <= '-') goto yy83;
+                               goto yy85;
+                       }
+               } else {
+                       if(yych <= 'e') {
+                               if(yych <= 'd') goto yy81;
+                       } else {
+                               if(yych == 'r') goto yy92;
+                               goto yy81;
+                       }
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 'd') goto yy81;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= ',') goto yy81;
+                       goto yy83;
+               } else {
+                       if(yych <= '.') goto yy85;
+                       if(yych != 'u') goto yy81;
+               }
+               yyaccept = 2;
+               YYMARKER = ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 32) {
+                       goto yy81;
+               }
+               if(yych <= ',') goto yy107;
+               if(yych <= '-') goto yy83;
+               goto yy85;
+yy107:
+#line 22 "bug1479044.b.re"
+               {
+               return "resnet";
+       }
+#line 936 "<stdout>"
+yy108:
+               yych = *++YYCURSOR;
+               if(yych != 't') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 't') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'l') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'd') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 's') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'l') goto yy19;
+yy114:
+               yych = *++YYCURSOR;
+               if(yych == '.') goto yy19;
+               goto yy116;
+yy115:
+               ++YYCURSOR;
+               if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+               yych = *YYCURSOR;
+yy116:
+               if(yybm[0+yych] & 64) {
+                       goto yy115;
+               }
+               if(yych != '.') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 0x0A) goto yy19;
+yy118:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 128) {
+                       goto yy118;
+               }
+               if(yych <= '-') goto yy19;
+yy120:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy118;
+               } else {
+                       if(yych <= '.') goto yy120;
+                       if(yych != 'u') goto yy118;
+               }
+yy122:
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy118;
+               } else {
+                       if(yych <= '.') goto yy120;
+                       if(yych != 's') goto yy118;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy118;
+               } else {
+                       if(yych <= '.') goto yy120;
+                       if(yych != 'w') goto yy118;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy118;
+               } else {
+                       if(yych <= '.') goto yy120;
+                       if(yych != 'e') goto yy118;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy118;
+               } else {
+                       if(yych <= '.') goto yy120;
+                       if(yych != 's') goto yy118;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy118;
+               } else {
+                       if(yych <= '.') goto yy120;
+                       if(yych != 't') goto yy118;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 128) {
+                       goto yy118;
+               }
+               if(yych <= '-') goto yy19;
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '.') {
+                       if(yych == 0x0A) goto yy19;
+                       if(yych <= '-') goto yy118;
+                       goto yy120;
+               } else {
+                       if(yych <= 'n') {
+                               if(yych <= 'm') goto yy118;
+                       } else {
+                               if(yych == 'u') goto yy122;
+                               goto yy118;
+                       }
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy118;
+               } else {
+                       if(yych <= '.') goto yy120;
+                       if(yych != 'e') goto yy118;
+               }
+               ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yych <= '-') {
+                       if(yych == 0x0A) goto yy19;
+                       goto yy118;
+               } else {
+                       if(yych <= '.') goto yy120;
+                       if(yych != 't') goto yy118;
+               }
+               yyaccept = 3;
+               YYMARKER = ++YYCURSOR;
+               if(YYLIMIT == YYCURSOR) YYFILL(1);
+               yych = *YYCURSOR;
+               if(yybm[0+yych] & 128) {
+                       goto yy118;
+               }
+               if(yych >= '.') goto yy120;
+yy132:
+#line 17 "bug1479044.b.re"
+               {
+               return "dsl";
+       }
+#line 1090 "<stdout>"
+yy133:
+               yych = *++YYCURSOR;
+               if(yych != 's') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy114;
+               goto yy19;
+yy135:
+               yych = *++YYCURSOR;
+               if(yych == 'e') goto yy142;
+               goto yy19;
+yy136:
+               yych = *++YYCURSOR;
+               if(yych == 'p') goto yy139;
+               goto yy19;
+yy137:
+               yych = *++YYCURSOR;
+               if(yych != 'o') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy114;
+               goto yy19;
+yy139:
+               yych = *++YYCURSOR;
+               if(yych != 'd') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 's') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy114;
+               goto yy19;
+yy142:
+               yych = *++YYCURSOR;
+               if(yych != 'm') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'i') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'u') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'm') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'C') goto yy114;
+               goto yy19;
+yy147:
+               yych = *++YYCURSOR;
+               if(yych != 's') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy114;
+               goto yy19;
+yy149:
+               yych = *++YYCURSOR;
+               if(yych != 's') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy114;
+               goto yy19;
+yy151:
+               yych = *++YYCURSOR;
+               if(yych != 's') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy114;
+               goto yy19;
+yy153:
+               yych = *++YYCURSOR;
+               if(yych == 'r') goto yy166;
+               goto yy19;
+yy154:
+               yych = *++YYCURSOR;
+               if(yych == 'c') goto yy165;
+               goto yy19;
+yy155:
+               yych = *++YYCURSOR;
+               if(yych != 'l') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'g') goto yy158;
+               if(yych != 'p') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'p') goto yy164;
+               goto yy19;
+yy158:
+               yych = *++YYCURSOR;
+               if(yych != 'w') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != '4') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'p') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'o') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'o') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy114;
+               goto yy19;
+yy164:
+               yych = *++YYCURSOR;
+               if(yych == 'p') goto yy114;
+               goto yy19;
+yy165:
+               yych = *++YYCURSOR;
+               if(yych == 'p') goto yy71;
+               goto yy19;
+yy166:
+               yych = *++YYCURSOR;
+               if(yych != 'm') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 's') goto yy71;
+               goto yy19;
+yy168:
+               yych = *++YYCURSOR;
+               if(yych != 's') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy114;
+               goto yy19;
+yy170:
+               yych = *++YYCURSOR;
+               if(yych != 's') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == 'l') goto yy114;
+               goto yy19;
+yy172:
+               yych = *++YYCURSOR;
+               if(yych != 's') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych != 'l') goto yy19;
+               yych = *++YYCURSOR;
+               if(yych == '.') goto yy19;
+               if(yych != 'p') goto yy116;
+               yych = *++YYCURSOR;
+               if(yych != 'p') goto yy19;
+               ++YYCURSOR;
+               if((yych = *YYCURSOR) == 'p') goto yy114;
+               goto yy19;
+       }
+}
+#line 40 "bug1479044.b.re"
+
+}
+
+int main(int argc, char **argv)
+{
+       int n = 0;
+       char *largv[2];
+
+       if (argc < 2)
+       {
+               argc = 2;
+               argv = largv;
+               argv[1] = "D-128-208-46-51.dhcp4.washington.edu";
+       }
+       while(++n < argc)
+       {
+               char *res = scan281(argv[n]);
+               printf("%s\n", res ? res : "<NULL>");
+       }
+       return 0;
+}
diff --git a/test/bug1479044.b.re b/test/bug1479044.b.re
new file mode 100755 (executable)
index 0000000..6ac5de7
--- /dev/null
@@ -0,0 +1,60 @@
+#define NULL ((char*) 0)
+#define YYCTYPE char
+#define YYCURSOR p
+#define YYLIMIT p
+#define YYMARKER q
+#define YYFILL(n)
+
+#include <stdio.h>
+
+char *scan281(char *p)
+{
+       char *q;
+start:
+/*!re2c
+
+       ( "adsl" | "adslppp" | "bdsl" | "cdsl" | "dslgw4pool" | "dslppp" | "edsl" | "fdsl" | "ldsl" | "pool" | "pppdsl" | "premiumC" | "vdsl" | "xsttldsl") [0-9a-k\-]+ ".".+ ".uswest.net"
+       {
+               return "dsl";
+       }
+
+       ( "dhcp" | "dorms" | "rh" ).* "-" [0-9]+ "-" [0-9]+ "." .+ ".resnet.pitt.edu"
+       {
+               return "resnet";
+       }
+
+       [0-9]+ "-" [0-9]+ "-" [0-9]+ "-" [0-9]+ "." ("dhcp" | .* "modem" | "bothell") .* ".washington.edu"
+       {
+               return "edu";
+       }
+
+       [\001-\377]
+       {
+               goto start;
+       }
+
+       [\000]
+       {
+               return NULL;
+       }
+*/
+}
+
+int main(int argc, char **argv)
+{
+       int n = 0;
+       char *largv[2];
+
+       if (argc < 2)
+       {
+               argc = 2;
+               argv = largv;
+               argv[1] = "D-128-208-46-51.dhcp4.washington.edu";
+       }
+       while(++n < argc)
+       {
+               char *res = scan281(argv[n]);
+               printf("%s\n", res ? res : "<NULL>");
+       }
+       return 0;
+}
diff --git a/test/bug1479044.c b/test/bug1479044.c
new file mode 100755 (executable)
index 0000000..64b351d
--- /dev/null
@@ -0,0 +1,1479 @@
+/* Generated by re2c */
+#line 1 "bug1479044.re"
+#define NULL ((char*) 0)
+#define YYCTYPE char
+#define YYCURSOR p
+#define YYLIMIT p
+#define YYMARKER q
+#define YYFILL(n)
+
+#include <stdio.h>
+
+char *scan281(char *p)
+{
+       char *q;
+start:
+
+#line 18 "<stdout>"
+{
+       YYCTYPE yych;
+       unsigned int yyaccept = 0;
+
+       if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x00:      goto yy16;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy14;
+       case 'a':       goto yy2;
+       case 'b':       goto yy4;
+       case 'c':       goto yy5;
+       case 'd':       goto yy6;
+       case 'e':       goto yy7;
+       case 'f':       goto yy8;
+       case 'l':       goto yy9;
+       case 'p':       goto yy10;
+       case 'r':       goto yy13;
+       case 'v':       goto yy11;
+       case 'x':       goto yy12;
+       default:        goto yy15;
+       }
+yy2:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'd':       goto yy172;
+       default:        goto yy3;
+       }
+yy3:
+#line 32 "bug1479044.re"
+       {
+               goto start;
+       }
+#line 62 "<stdout>"
+yy4:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'd':       goto yy170;
+       default:        goto yy3;
+       }
+yy5:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'd':       goto yy168;
+       default:        goto yy3;
+       }
+yy6:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'h':       goto yy154;
+       case 'o':       goto yy153;
+       case 's':       goto yy155;
+       default:        goto yy3;
+       }
+yy7:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'd':       goto yy151;
+       default:        goto yy3;
+       }
+yy8:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'd':       goto yy149;
+       default:        goto yy3;
+       }
+yy9:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'd':       goto yy147;
+       default:        goto yy3;
+       }
+yy10:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'o':       goto yy137;
+       case 'p':       goto yy136;
+       case 'r':       goto yy135;
+       default:        goto yy3;
+       }
+yy11:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'd':       goto yy133;
+       default:        goto yy3;
+       }
+yy12:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 's':       goto yy108;
+       default:        goto yy3;
+       }
+yy13:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case 'h':       goto yy71;
+       default:        goto yy3;
+       }
+yy14:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch(yych){
+       case '-':       goto yy18;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy20;
+       default:        goto yy3;
+       }
+yy15:
+       yych = *++YYCURSOR;
+       goto yy3;
+yy16:
+       ++YYCURSOR;
+#line 37 "bug1479044.re"
+       {
+               return NULL;
+       }
+#line 163 "<stdout>"
+yy18:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy22;
+       default:        goto yy19;
+       }
+yy19:
+       YYCURSOR = YYMARKER;
+       switch(yyaccept) {
+       case 3: goto yy132;
+       case 2: goto yy107;
+       case 1: goto yy63;
+       case 0: goto yy3;
+       }
+yy20:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+       switch(yych){
+       case '-':       goto yy18;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy20;
+       default:        goto yy19;
+       }
+yy22:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+       switch(yych){
+       case '-':       goto yy24;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy22;
+       default:        goto yy19;
+       }
+yy24:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy25;
+       default:        goto yy19;
+       }
+yy25:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+       switch(yych){
+       case '-':       goto yy27;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy25;
+       default:        goto yy19;
+       }
+yy27:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy28;
+       default:        goto yy19;
+       }
+yy28:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+       yych = *YYCURSOR;
+       switch(yych){
+       case '.':       goto yy30;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy28;
+       default:        goto yy19;
+       }
+yy30:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'b':       goto yy34;
+       case 'd':       goto yy31;
+       default:        goto yy33;
+       }
+yy31:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'h':       goto yy69;
+       default:        goto yy33;
+       }
+yy32:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+yy33:
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case 'm':       goto yy35;
+       default:        goto yy32;
+       }
+yy34:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'o':       goto yy64;
+       default:        goto yy33;
+       }
+yy35:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case 'm':       goto yy35;
+       case 'o':       goto yy37;
+       default:        goto yy32;
+       }
+yy37:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case 'd':       goto yy38;
+       case 'm':       goto yy35;
+       default:        goto yy32;
+       }
+yy38:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case 'e':       goto yy39;
+       case 'm':       goto yy35;
+       default:        goto yy32;
+       }
+yy39:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case 'm':       goto yy40;
+       default:        goto yy32;
+       }
+yy40:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       case 'o':       goto yy46;
+       default:        goto yy42;
+       }
+yy42:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy44:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       case 'w':       goto yy49;
+       default:        goto yy42;
+       }
+yy46:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'd':       goto yy47;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy47:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'e':       goto yy48;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy48:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy49:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'a':       goto yy50;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy50:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       case 's':       goto yy51;
+       default:        goto yy42;
+       }
+yy51:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'h':       goto yy52;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy52:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'i':       goto yy53;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy53:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       case 'n':       goto yy54;
+       default:        goto yy42;
+       }
+yy54:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'g':       goto yy55;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy55:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       case 't':       goto yy56;
+       default:        goto yy42;
+       }
+yy56:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       case 'o':       goto yy57;
+       default:        goto yy42;
+       }
+yy57:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       case 'n':       goto yy58;
+       default:        goto yy42;
+       }
+yy58:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy59;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy59:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'e':       goto yy60;
+       case 'm':       goto yy40;
+       case 'w':       goto yy49;
+       default:        goto yy42;
+       }
+yy60:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'd':       goto yy61;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy61:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       case 'u':       goto yy62;
+       default:        goto yy42;
+       }
+yy62:
+       yyaccept = 1;
+       YYMARKER = ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy63;
+       case '.':       goto yy44;
+       case 'm':       goto yy40;
+       default:        goto yy42;
+       }
+yy63:
+#line 27 "bug1479044.re"
+       {
+               return "edu";
+       }
+#line 580 "<stdout>"
+yy64:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 't':       goto yy65;
+       default:        goto yy33;
+       }
+yy65:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'h':       goto yy66;
+       default:        goto yy33;
+       }
+yy66:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'e':       goto yy67;
+       default:        goto yy33;
+       }
+yy67:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy68;
+       default:        goto yy33;
+       }
+yy68:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy42;
+       default:        goto yy33;
+       }
+yy69:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'c':       goto yy70;
+       default:        goto yy33;
+       }
+yy70:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'p':       goto yy42;
+       default:        goto yy33;
+       }
+yy71:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy73;
+       default:        goto yy71;
+       }
+yy73:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy73;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy75;
+       default:        goto yy71;
+       }
+yy75:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy77;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy75;
+       default:        goto yy71;
+       }
+yy77:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy73;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy78;
+       default:        goto yy71;
+       }
+yy78:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy77;
+       case '.':       goto yy80;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy78;
+       default:        goto yy71;
+       }
+yy80:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case '.':       goto yy81;
+       default:        goto yy82;
+       }
+yy81:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+yy82:
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       default:        goto yy81;
+       }
+yy83:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy87;
+       default:        goto yy81;
+       }
+yy85:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 'r':       goto yy92;
+       default:        goto yy81;
+       }
+yy87:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy89;
+       case '.':       goto yy85;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy87;
+       default:        goto yy81;
+       }
+yy89:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy90;
+       default:        goto yy81;
+       }
+yy90:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy89;
+       case '.':       goto yy85;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy90;
+       default:        goto yy81;
+       }
+yy92:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 'e':       goto yy93;
+       default:        goto yy81;
+       }
+yy93:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 's':       goto yy94;
+       default:        goto yy81;
+       }
+yy94:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 'n':       goto yy95;
+       default:        goto yy81;
+       }
+yy95:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 'e':       goto yy96;
+       default:        goto yy81;
+       }
+yy96:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 't':       goto yy97;
+       default:        goto yy81;
+       }
+yy97:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy98;
+       default:        goto yy81;
+       }
+yy98:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 'p':       goto yy99;
+       case 'r':       goto yy92;
+       default:        goto yy81;
+       }
+yy99:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 'i':       goto yy100;
+       default:        goto yy81;
+       }
+yy100:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 't':       goto yy101;
+       default:        goto yy81;
+       }
+yy101:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 't':       goto yy102;
+       default:        goto yy81;
+       }
+yy102:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy103;
+       default:        goto yy81;
+       }
+yy103:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 'e':       goto yy104;
+       case 'r':       goto yy92;
+       default:        goto yy81;
+       }
+yy104:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 'd':       goto yy105;
+       default:        goto yy81;
+       }
+yy105:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       case 'u':       goto yy106;
+       default:        goto yy81;
+       }
+yy106:
+       yyaccept = 2;
+       YYMARKER = ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy107;
+       case '-':       goto yy83;
+       case '.':       goto yy85;
+       default:        goto yy81;
+       }
+yy107:
+#line 22 "bug1479044.re"
+       {
+               return "resnet";
+       }
+#line 987 "<stdout>"
+yy108:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 't':       goto yy109;
+       default:        goto yy19;
+       }
+yy109:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 't':       goto yy110;
+       default:        goto yy19;
+       }
+yy110:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy111;
+       default:        goto yy19;
+       }
+yy111:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'd':       goto yy112;
+       default:        goto yy19;
+       }
+yy112:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy113;
+       default:        goto yy19;
+       }
+yy113:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy114:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case '.':       goto yy19;
+       default:        goto yy116;
+       }
+yy115:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+yy116:
+       switch(yych){
+       case '-':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':       goto yy115;
+       case '.':       goto yy117;
+       default:        goto yy19;
+       }
+yy117:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       default:        goto yy118;
+       }
+yy118:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       default:        goto yy118;
+       }
+yy120:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       case 'u':       goto yy122;
+       default:        goto yy118;
+       }
+yy122:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       case 's':       goto yy123;
+       default:        goto yy118;
+       }
+yy123:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       case 'w':       goto yy124;
+       default:        goto yy118;
+       }
+yy124:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       case 'e':       goto yy125;
+       default:        goto yy118;
+       }
+yy125:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       case 's':       goto yy126;
+       default:        goto yy118;
+       }
+yy126:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       case 't':       goto yy127;
+       default:        goto yy118;
+       }
+yy127:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy128;
+       default:        goto yy118;
+       }
+yy128:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       case 'n':       goto yy129;
+       case 'u':       goto yy122;
+       default:        goto yy118;
+       }
+yy129:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       case 'e':       goto yy130;
+       default:        goto yy118;
+       }
+yy130:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy19;
+       case '.':       goto yy120;
+       case 't':       goto yy131;
+       default:        goto yy118;
+       }
+yy131:
+       yyaccept = 3;
+       YYMARKER = ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 0x0A:      goto yy132;
+       case '.':       goto yy120;
+       default:        goto yy118;
+       }
+yy132:
+#line 17 "bug1479044.re"
+       {
+               return "dsl";
+       }
+#line 1191 "<stdout>"
+yy133:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy134;
+       default:        goto yy19;
+       }
+yy134:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy135:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'e':       goto yy142;
+       default:        goto yy19;
+       }
+yy136:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'p':       goto yy139;
+       default:        goto yy19;
+       }
+yy137:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'o':       goto yy138;
+       default:        goto yy19;
+       }
+yy138:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy139:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'd':       goto yy140;
+       default:        goto yy19;
+       }
+yy140:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy141;
+       default:        goto yy19;
+       }
+yy141:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy142:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'm':       goto yy143;
+       default:        goto yy19;
+       }
+yy143:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'i':       goto yy144;
+       default:        goto yy19;
+       }
+yy144:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'u':       goto yy145;
+       default:        goto yy19;
+       }
+yy145:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'm':       goto yy146;
+       default:        goto yy19;
+       }
+yy146:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'C':       goto yy114;
+       default:        goto yy19;
+       }
+yy147:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy148;
+       default:        goto yy19;
+       }
+yy148:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy149:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy150;
+       default:        goto yy19;
+       }
+yy150:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy151:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy152;
+       default:        goto yy19;
+       }
+yy152:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy153:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'r':       goto yy166;
+       default:        goto yy19;
+       }
+yy154:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'c':       goto yy165;
+       default:        goto yy19;
+       }
+yy155:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy156;
+       default:        goto yy19;
+       }
+yy156:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'g':       goto yy158;
+       case 'p':       goto yy157;
+       default:        goto yy19;
+       }
+yy157:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'p':       goto yy164;
+       default:        goto yy19;
+       }
+yy158:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'w':       goto yy159;
+       default:        goto yy19;
+       }
+yy159:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case '4':       goto yy160;
+       default:        goto yy19;
+       }
+yy160:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'p':       goto yy161;
+       default:        goto yy19;
+       }
+yy161:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'o':       goto yy162;
+       default:        goto yy19;
+       }
+yy162:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'o':       goto yy163;
+       default:        goto yy19;
+       }
+yy163:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy164:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'p':       goto yy114;
+       default:        goto yy19;
+       }
+yy165:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'p':       goto yy71;
+       default:        goto yy19;
+       }
+yy166:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'm':       goto yy167;
+       default:        goto yy19;
+       }
+yy167:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy71;
+       default:        goto yy19;
+       }
+yy168:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy169;
+       default:        goto yy19;
+       }
+yy169:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy170:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy171;
+       default:        goto yy19;
+       }
+yy171:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy114;
+       default:        goto yy19;
+       }
+yy172:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 's':       goto yy173;
+       default:        goto yy19;
+       }
+yy173:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'l':       goto yy174;
+       default:        goto yy19;
+       }
+yy174:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case '.':       goto yy19;
+       case 'p':       goto yy175;
+       default:        goto yy116;
+       }
+yy175:
+       yych = *++YYCURSOR;
+       switch(yych){
+       case 'p':       goto yy176;
+       default:        goto yy19;
+       }
+yy176:
+       ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case 'p':       goto yy114;
+       default:        goto yy19;
+       }
+}
+#line 40 "bug1479044.re"
+
+}
+
+int main(int argc, char **argv)
+{
+       int n = 0;
+       char *largv[2];
+
+       if (argc < 2)
+       {
+               argc = 2;
+               argv = largv;
+               argv[1] = "D-128-208-46-51.dhcp4.washington.edu";
+       }
+       while(++n < argc)
+       {
+               char *res = scan281(argv[n]);
+               printf("%s\n", res ? res : "<NULL>");
+       }
+       return 0;
+}
diff --git a/test/bug1479044.re b/test/bug1479044.re
new file mode 100755 (executable)
index 0000000..6ac5de7
--- /dev/null
@@ -0,0 +1,60 @@
+#define NULL ((char*) 0)
+#define YYCTYPE char
+#define YYCURSOR p
+#define YYLIMIT p
+#define YYMARKER q
+#define YYFILL(n)
+
+#include <stdio.h>
+
+char *scan281(char *p)
+{
+       char *q;
+start:
+/*!re2c
+
+       ( "adsl" | "adslppp" | "bdsl" | "cdsl" | "dslgw4pool" | "dslppp" | "edsl" | "fdsl" | "ldsl" | "pool" | "pppdsl" | "premiumC" | "vdsl" | "xsttldsl") [0-9a-k\-]+ ".".+ ".uswest.net"
+       {
+               return "dsl";
+       }
+
+       ( "dhcp" | "dorms" | "rh" ).* "-" [0-9]+ "-" [0-9]+ "." .+ ".resnet.pitt.edu"
+       {
+               return "resnet";
+       }
+
+       [0-9]+ "-" [0-9]+ "-" [0-9]+ "-" [0-9]+ "." ("dhcp" | .* "modem" | "bothell") .* ".washington.edu"
+       {
+               return "edu";
+       }
+
+       [\001-\377]
+       {
+               goto start;
+       }
+
+       [\000]
+       {
+               return NULL;
+       }
+*/
+}
+
+int main(int argc, char **argv)
+{
+       int n = 0;
+       char *largv[2];
+
+       if (argc < 2)
+       {
+               argc = 2;
+               argv = largv;
+               argv[1] = "D-128-208-46-51.dhcp4.washington.edu";
+       }
+       while(++n < argc)
+       {
+               char *res = scan281(argv[n]);
+               printf("%s\n", res ? res : "<NULL>");
+       }
+       return 0;
+}
diff --git a/test/bug1479044.s.c b/test/bug1479044.s.c
new file mode 100755 (executable)
index 0000000..ead37ab
--- /dev/null
@@ -0,0 +1,1209 @@
+/* Generated by re2c */
+#line 1 "bug1479044.s.re"
+#define NULL ((char*) 0)
+#define YYCTYPE char
+#define YYCURSOR p
+#define YYLIMIT p
+#define YYMARKER q
+#define YYFILL(n)
+
+#include <stdio.h>
+
+char *scan281(char *p)
+{
+       char *q;
+start:
+
+#line 18 "<stdout>"
+{
+       YYCTYPE yych;
+       unsigned int yyaccept = 0;
+
+       if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+       yych = *YYCURSOR;
+       if(yych <= 'f') {
+               if(yych <= 'a') {
+                       if(yych <= '/') {
+                               if(yych <= 0x00) goto yy16;
+                               goto yy15;
+                       } else {
+                               if(yych <= '9') goto yy14;
+                               if(yych <= '`') goto yy15;
+                       }
+               } else {
+                       if(yych <= 'c') {
+                               if(yych <= 'b') goto yy4;
+                               goto yy5;
+                       } else {
+                               if(yych <= 'd') goto yy6;
+                               if(yych <= 'e') goto yy7;
+                               goto yy8;
+                       }
+               }
+       } else {
+               if(yych <= 'q') {
+                       if(yych <= 'l') {
+                               if(yych <= 'k') goto yy15;
+                               goto yy9;
+                       } else {
+                               if(yych == 'p') goto yy10;
+                               goto yy15;
+                       }
+               } else {
+                       if(yych <= 'v') {
+                               if(yych <= 'r') goto yy13;
+                               if(yych <= 'u') goto yy15;
+                               goto yy11;
+                       } else {
+                               if(yych == 'x') goto yy12;
+                               goto yy15;
+                       }
+               }
+       }
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'd') goto yy172;
+yy3:
+#line 32 "bug1479044.s.re"
+       {
+               goto start;
+       }
+#line 72 "<stdout>"
+yy4:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'd') goto yy170;
+       goto yy3;
+yy5:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'd') goto yy168;
+       goto yy3;
+yy6:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych <= 'n') {
+               if(yych == 'h') goto yy154;
+               goto yy3;
+       } else {
+               if(yych <= 'o') goto yy153;
+               if(yych == 's') goto yy155;
+               goto yy3;
+       }
+yy7:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'd') goto yy151;
+       goto yy3;
+yy8:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'd') goto yy149;
+       goto yy3;
+yy9:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'd') goto yy147;
+       goto yy3;
+yy10:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych <= 'p') {
+               if(yych <= 'n') goto yy3;
+               if(yych <= 'o') goto yy137;
+               goto yy136;
+       } else {
+               if(yych == 'r') goto yy135;
+               goto yy3;
+       }
+yy11:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'd') goto yy133;
+       goto yy3;
+yy12:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 's') goto yy108;
+       goto yy3;
+yy13:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == 'h') goto yy71;
+       goto yy3;
+yy14:
+       yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych == '-') goto yy18;
+       if(yych <= '/') goto yy3;
+       if(yych <= '9') goto yy20;
+       goto yy3;
+yy15:
+       yych = *++YYCURSOR;
+       goto yy3;
+yy16:
+       ++YYCURSOR;
+#line 37 "bug1479044.s.re"
+       {
+               return NULL;
+       }
+#line 151 "<stdout>"
+yy18:
+       yych = *++YYCURSOR;
+       if(yych <= '/') goto yy19;
+       if(yych <= '9') goto yy22;
+yy19:
+       YYCURSOR = YYMARKER;
+       switch(yyaccept) {
+       case 3: goto yy132;
+       case 2: goto yy107;
+       case 1: goto yy63;
+       case 0: goto yy3;
+       }
+yy20:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+       if(yych == '-') goto yy18;
+       if(yych <= '/') goto yy19;
+       if(yych <= '9') goto yy20;
+       goto yy19;
+yy22:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+       if(yych == '-') goto yy24;
+       if(yych <= '/') goto yy19;
+       if(yych <= '9') goto yy22;
+       goto yy19;
+yy24:
+       yych = *++YYCURSOR;
+       if(yych <= '/') goto yy19;
+       if(yych >= ':') goto yy19;
+yy25:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+       if(yych == '-') goto yy27;
+       if(yych <= '/') goto yy19;
+       if(yych <= '9') goto yy25;
+       goto yy19;
+yy27:
+       yych = *++YYCURSOR;
+       if(yych <= '/') goto yy19;
+       if(yych >= ':') goto yy19;
+yy28:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+       yych = *YYCURSOR;
+       if(yych == '.') goto yy30;
+       if(yych <= '/') goto yy19;
+       if(yych <= '9') goto yy28;
+       goto yy19;
+yy30:
+       yych = *++YYCURSOR;
+       if(yych == 'b') goto yy34;
+       if(yych != 'd') goto yy33;
+       yych = *++YYCURSOR;
+       if(yych == 'h') goto yy69;
+       goto yy33;
+yy32:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+yy33:
+       if(yych == 0x0A) goto yy19;
+       if(yych == 'm') goto yy35;
+       goto yy32;
+yy34:
+       yych = *++YYCURSOR;
+       if(yych == 'o') goto yy64;
+       goto yy33;
+yy35:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= 'l') {
+               if(yych == 0x0A) goto yy19;
+               goto yy32;
+       } else {
+               if(yych <= 'm') goto yy35;
+               if(yych != 'o') goto yy32;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= 'c') {
+               if(yych == 0x0A) goto yy19;
+               goto yy32;
+       } else {
+               if(yych <= 'd') goto yy38;
+               if(yych == 'm') goto yy35;
+               goto yy32;
+       }
+yy38:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= 'd') {
+               if(yych == 0x0A) goto yy19;
+               goto yy32;
+       } else {
+               if(yych <= 'e') goto yy39;
+               if(yych == 'm') goto yy35;
+               goto yy32;
+       }
+yy39:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych == 0x0A) goto yy19;
+       if(yych != 'm') goto yy32;
+yy40:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych >= '.') goto yy44;
+       } else {
+               if(yych <= 'm') {
+                       if(yych >= 'm') goto yy40;
+               } else {
+                       if(yych == 'o') goto yy46;
+               }
+       }
+yy42:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy42;
+       } else {
+               if(yych <= '.') goto yy44;
+               if(yych == 'm') goto yy40;
+               goto yy42;
+       }
+yy44:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'm') {
+                       if(yych <= 'l') goto yy42;
+                       goto yy40;
+               } else {
+                       if(yych == 'w') goto yy49;
+                       goto yy42;
+               }
+       }
+yy46:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'd') {
+                       if(yych <= 'c') goto yy42;
+               } else {
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'e') {
+                       if(yych <= 'd') goto yy42;
+               } else {
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy42;
+       } else {
+               if(yych <= '.') goto yy44;
+               if(yych == 'm') goto yy40;
+               goto yy42;
+       }
+yy49:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'a') {
+                       if(yych <= '`') goto yy42;
+               } else {
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'm') {
+                       if(yych <= 'l') goto yy42;
+                       goto yy40;
+               } else {
+                       if(yych != 's') goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'h') {
+                       if(yych <= 'g') goto yy42;
+               } else {
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'i') {
+                       if(yych <= 'h') goto yy42;
+               } else {
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'l') goto yy42;
+               if(yych <= 'm') goto yy40;
+               if(yych >= 'o') goto yy42;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'g') {
+                       if(yych <= 'f') goto yy42;
+               } else {
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'm') {
+                       if(yych <= 'l') goto yy42;
+                       goto yy40;
+               } else {
+                       if(yych != 't') goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'm') {
+                       if(yych <= 'l') goto yy42;
+                       goto yy40;
+               } else {
+                       if(yych != 'o') goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'l') goto yy42;
+               if(yych <= 'm') goto yy40;
+               if(yych >= 'o') goto yy42;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy42;
+       } else {
+               if(yych <= '.') goto yy59;
+               if(yych == 'm') goto yy40;
+               goto yy42;
+       }
+yy59:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= 'd') {
+               if(yych <= 0x0A) {
+                       if(yych <= 0x09) goto yy42;
+                       goto yy19;
+               } else {
+                       if(yych == '.') goto yy44;
+                       goto yy42;
+               }
+       } else {
+               if(yych <= 'm') {
+                       if(yych <= 'e') goto yy60;
+                       if(yych <= 'l') goto yy42;
+                       goto yy40;
+               } else {
+                       if(yych == 'w') goto yy49;
+                       goto yy42;
+               }
+       }
+yy60:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'd') {
+                       if(yych <= 'c') goto yy42;
+               } else {
+                       if(yych == 'm') goto yy40;
+                       goto yy42;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy42;
+               goto yy44;
+       } else {
+               if(yych <= 'm') {
+                       if(yych <= 'l') goto yy42;
+                       goto yy40;
+               } else {
+                       if(yych != 'u') goto yy42;
+               }
+       }
+       yyaccept = 1;
+       YYMARKER = ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych != 0x0A) goto yy42;
+       } else {
+               if(yych <= '.') goto yy44;
+               if(yych == 'm') goto yy40;
+               goto yy42;
+       }
+yy63:
+#line 27 "bug1479044.s.re"
+       {
+               return "edu";
+       }
+#line 558 "<stdout>"
+yy64:
+       yych = *++YYCURSOR;
+       if(yych != 't') goto yy33;
+       yych = *++YYCURSOR;
+       if(yych != 'h') goto yy33;
+       yych = *++YYCURSOR;
+       if(yych != 'e') goto yy33;
+       yych = *++YYCURSOR;
+       if(yych != 'l') goto yy33;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy42;
+       goto yy33;
+yy69:
+       yych = *++YYCURSOR;
+       if(yych != 'c') goto yy33;
+       yych = *++YYCURSOR;
+       if(yych == 'p') goto yy42;
+       goto yy33;
+yy71:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych == 0x0A) goto yy19;
+       if(yych != '-') goto yy71;
+yy73:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= ',') {
+               if(yych == 0x0A) goto yy19;
+               goto yy71;
+       } else {
+               if(yych <= '-') goto yy73;
+               if(yych <= '/') goto yy71;
+               if(yych >= ':') goto yy71;
+       }
+yy75:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= ',') {
+               if(yych == 0x0A) goto yy19;
+               goto yy71;
+       } else {
+               if(yych <= '-') goto yy77;
+               if(yych <= '/') goto yy71;
+               if(yych <= '9') goto yy75;
+               goto yy71;
+       }
+yy77:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= ',') {
+               if(yych == 0x0A) goto yy19;
+               goto yy71;
+       } else {
+               if(yych <= '-') goto yy73;
+               if(yych <= '/') goto yy71;
+               if(yych >= ':') goto yy71;
+       }
+yy78:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy71;
+               goto yy77;
+       } else {
+               if(yych <= '.') goto yy80;
+               if(yych <= '/') goto yy71;
+               if(yych <= '9') goto yy78;
+               goto yy71;
+       }
+yy80:
+       yych = *++YYCURSOR;
+       if(yych != '.') goto yy82;
+yy81:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+yy82:
+       if(yych <= ',') {
+               if(yych == 0x0A) goto yy19;
+               goto yy81;
+       } else {
+               if(yych <= '-') goto yy83;
+               if(yych <= '.') goto yy85;
+               goto yy81;
+       }
+yy83:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych <= '/') goto yy81;
+               if(yych <= '9') goto yy87;
+               goto yy81;
+       }
+yy85:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych == 'r') goto yy92;
+               goto yy81;
+       }
+yy87:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych <= '/') goto yy81;
+               if(yych <= '9') goto yy87;
+               goto yy81;
+       }
+yy89:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych <= '/') goto yy81;
+               if(yych >= ':') goto yy81;
+       }
+yy90:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy89;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych <= '/') goto yy81;
+               if(yych <= '9') goto yy90;
+               goto yy81;
+       }
+yy92:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 'e') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 's') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 'n') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 'e') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 't') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= ',') {
+               if(yych == 0x0A) goto yy19;
+               goto yy81;
+       } else {
+               if(yych <= '-') goto yy83;
+               if(yych >= '/') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych <= 0x0A) {
+                       if(yych <= 0x09) goto yy81;
+                       goto yy19;
+               } else {
+                       if(yych <= ',') goto yy81;
+                       if(yych <= '-') goto yy83;
+                       goto yy85;
+               }
+       } else {
+               if(yych <= 'p') {
+                       if(yych <= 'o') goto yy81;
+               } else {
+                       if(yych == 'r') goto yy92;
+                       goto yy81;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 'i') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 't') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 't') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= ',') {
+               if(yych == 0x0A) goto yy19;
+               goto yy81;
+       } else {
+               if(yych <= '-') goto yy83;
+               if(yych >= '/') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych <= 0x0A) {
+                       if(yych <= 0x09) goto yy81;
+                       goto yy19;
+               } else {
+                       if(yych <= ',') goto yy81;
+                       if(yych <= '-') goto yy83;
+                       goto yy85;
+               }
+       } else {
+               if(yych <= 'e') {
+                       if(yych <= 'd') goto yy81;
+               } else {
+                       if(yych == 'r') goto yy92;
+                       goto yy81;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 'd') goto yy81;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= ',') goto yy81;
+               goto yy83;
+       } else {
+               if(yych <= '.') goto yy85;
+               if(yych != 'u') goto yy81;
+       }
+       yyaccept = 2;
+       YYMARKER = ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= ',') {
+               if(yych != 0x0A) goto yy81;
+       } else {
+               if(yych <= '-') goto yy83;
+               if(yych <= '.') goto yy85;
+               goto yy81;
+       }
+yy107:
+#line 22 "bug1479044.s.re"
+       {
+               return "resnet";
+       }
+#line 904 "<stdout>"
+yy108:
+       yych = *++YYCURSOR;
+       if(yych != 't') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 't') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'l') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'd') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'l') goto yy19;
+yy114:
+       yych = *++YYCURSOR;
+       if(yych == '.') goto yy19;
+       goto yy116;
+yy115:
+       ++YYCURSOR;
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       yych = *YYCURSOR;
+yy116:
+       if(yych <= '/') {
+               if(yych <= ',') goto yy19;
+               if(yych <= '-') goto yy115;
+               if(yych >= '/') goto yy19;
+       } else {
+               if(yych <= '9') goto yy115;
+               if(yych <= '`') goto yy19;
+               if(yych <= 'k') goto yy115;
+               goto yy19;
+       }
+       yych = *++YYCURSOR;
+       if(yych == 0x0A) goto yy19;
+yy118:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych == 0x0A) goto yy19;
+       if(yych != '.') goto yy118;
+yy120:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy118;
+       } else {
+               if(yych <= '.') goto yy120;
+               if(yych != 'u') goto yy118;
+       }
+yy122:
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy118;
+       } else {
+               if(yych <= '.') goto yy120;
+               if(yych != 's') goto yy118;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy118;
+       } else {
+               if(yych <= '.') goto yy120;
+               if(yych != 'w') goto yy118;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy118;
+       } else {
+               if(yych <= '.') goto yy120;
+               if(yych != 'e') goto yy118;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy118;
+       } else {
+               if(yych <= '.') goto yy120;
+               if(yych != 's') goto yy118;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy118;
+       } else {
+               if(yych <= '.') goto yy120;
+               if(yych != 't') goto yy118;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych == 0x0A) goto yy19;
+       if(yych != '.') goto yy118;
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '.') {
+               if(yych == 0x0A) goto yy19;
+               if(yych <= '-') goto yy118;
+               goto yy120;
+       } else {
+               if(yych <= 'n') {
+                       if(yych <= 'm') goto yy118;
+               } else {
+                       if(yych == 'u') goto yy122;
+                       goto yy118;
+               }
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy118;
+       } else {
+               if(yych <= '.') goto yy120;
+               if(yych != 'e') goto yy118;
+       }
+       ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '-') {
+               if(yych == 0x0A) goto yy19;
+               goto yy118;
+       } else {
+               if(yych <= '.') goto yy120;
+               if(yych != 't') goto yy118;
+       }
+       yyaccept = 3;
+       YYMARKER = ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych == 0x0A) goto yy132;
+       if(yych == '.') goto yy120;
+       goto yy118;
+yy132:
+#line 17 "bug1479044.s.re"
+       {
+               return "dsl";
+       }
+#line 1059 "<stdout>"
+yy133:
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy114;
+       goto yy19;
+yy135:
+       yych = *++YYCURSOR;
+       if(yych == 'e') goto yy142;
+       goto yy19;
+yy136:
+       yych = *++YYCURSOR;
+       if(yych == 'p') goto yy139;
+       goto yy19;
+yy137:
+       yych = *++YYCURSOR;
+       if(yych != 'o') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy114;
+       goto yy19;
+yy139:
+       yych = *++YYCURSOR;
+       if(yych != 'd') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy114;
+       goto yy19;
+yy142:
+       yych = *++YYCURSOR;
+       if(yych != 'm') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'i') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'u') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'm') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'C') goto yy114;
+       goto yy19;
+yy147:
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy114;
+       goto yy19;
+yy149:
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy114;
+       goto yy19;
+yy151:
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy114;
+       goto yy19;
+yy153:
+       yych = *++YYCURSOR;
+       if(yych == 'r') goto yy166;
+       goto yy19;
+yy154:
+       yych = *++YYCURSOR;
+       if(yych == 'c') goto yy165;
+       goto yy19;
+yy155:
+       yych = *++YYCURSOR;
+       if(yych != 'l') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'g') goto yy158;
+       if(yych != 'p') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'p') goto yy164;
+       goto yy19;
+yy158:
+       yych = *++YYCURSOR;
+       if(yych != 'w') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != '4') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'p') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'o') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'o') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy114;
+       goto yy19;
+yy164:
+       yych = *++YYCURSOR;
+       if(yych == 'p') goto yy114;
+       goto yy19;
+yy165:
+       yych = *++YYCURSOR;
+       if(yych == 'p') goto yy71;
+       goto yy19;
+yy166:
+       yych = *++YYCURSOR;
+       if(yych != 'm') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 's') goto yy71;
+       goto yy19;
+yy168:
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy114;
+       goto yy19;
+yy170:
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == 'l') goto yy114;
+       goto yy19;
+yy172:
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych != 'l') goto yy19;
+       yych = *++YYCURSOR;
+       if(yych == '.') goto yy19;
+       if(yych != 'p') goto yy116;
+       yych = *++YYCURSOR;
+       if(yych != 'p') goto yy19;
+       ++YYCURSOR;
+       if((yych = *YYCURSOR) == 'p') goto yy114;
+       goto yy19;
+}
+#line 40 "bug1479044.s.re"
+
+}
+
+int main(int argc, char **argv)
+{
+       int n = 0;
+       char *largv[2];
+
+       if (argc < 2)
+       {
+               argc = 2;
+               argv = largv;
+               argv[1] = "D-128-208-46-51.dhcp4.washington.edu";
+       }
+       while(++n < argc)
+       {
+               char *res = scan281(argv[n]);
+               printf("%s\n", res ? res : "<NULL>");
+       }
+       return 0;
+}
diff --git a/test/bug1479044.s.re b/test/bug1479044.s.re
new file mode 100755 (executable)
index 0000000..6ac5de7
--- /dev/null
@@ -0,0 +1,60 @@
+#define NULL ((char*) 0)
+#define YYCTYPE char
+#define YYCURSOR p
+#define YYLIMIT p
+#define YYMARKER q
+#define YYFILL(n)
+
+#include <stdio.h>
+
+char *scan281(char *p)
+{
+       char *q;
+start:
+/*!re2c
+
+       ( "adsl" | "adslppp" | "bdsl" | "cdsl" | "dslgw4pool" | "dslppp" | "edsl" | "fdsl" | "ldsl" | "pool" | "pppdsl" | "premiumC" | "vdsl" | "xsttldsl") [0-9a-k\-]+ ".".+ ".uswest.net"
+       {
+               return "dsl";
+       }
+
+       ( "dhcp" | "dorms" | "rh" ).* "-" [0-9]+ "-" [0-9]+ "." .+ ".resnet.pitt.edu"
+       {
+               return "resnet";
+       }
+
+       [0-9]+ "-" [0-9]+ "-" [0-9]+ "-" [0-9]+ "." ("dhcp" | .* "modem" | "bothell") .* ".washington.edu"
+       {
+               return "edu";
+       }
+
+       [\001-\377]
+       {
+               goto start;
+       }
+
+       [\000]
+       {
+               return NULL;
+       }
+*/
+}
+
+int main(int argc, char **argv)
+{
+       int n = 0;
+       char *largv[2];
+
+       if (argc < 2)
+       {
+               argc = 2;
+               argv = largv;
+               argv[1] = "D-128-208-46-51.dhcp4.washington.edu";
+       }
+       while(++n < argc)
+       {
+               char *res = scan281(argv[n]);
+               printf("%s\n", res ? res : "<NULL>");
+       }
+       return 0;
+}