Changed scanner to use a 0 as a terminator for the input, since using a \n caused...
authornuffer <nuffer@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 1 Nov 2004 06:18:41 +0000 (06:18 +0000)
committernuffer <nuffer@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 1 Nov 2004 06:18:41 +0000 (06:18 +0000)
Fixing bug [ 1012748 ] re2c does not emit last line if '\n' missing.

bootstrap/scanner.cc
scanner.re

index 2d641bbb23fdc274a348fd98535859a021624c17..878286ad62782dbe0aa03625ce4fa359583133aa 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.9.4 on Sun Oct 31 21:27:49 2004 */
+/* Generated by re2c 0.9.4 on Sun Oct 31 23:17:13 2004 */
 #line 1 "scanner.re"
 /* $Id$ */
 #include <stdlib.h>
@@ -57,14 +57,14 @@ char *Scanner::fill(char *cursor){
            bot = buf;
        }
        if((cnt = in.rdbuf()->sgetn((char*) lim, BSIZE)) != BSIZE){
-           eof = &lim[cnt]; *eof++ = '\n';
+           eof = &lim[cnt]; *eof++ = '\0';
        }
        lim += cnt;
     }
     return cursor;
 }
 
-#line 74 "scanner.re"
+#line 75 "scanner.re"
 
 
 int Scanner::echo(std::ostream &out){
@@ -72,7 +72,9 @@ int Scanner::echo(std::ostream &out){
 
     // Catch EOF
     if (eof && cursor == eof)
+       {
        return 0;
+       }
 
     tok = cursor;
 echo:
@@ -86,57 +88,68 @@ yy1:        ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy4;
-       if(yych != '/') goto yy6;
-       goto yy2;
+       if(yych <= 0x0A){
+               if(yych <= 0x00)        goto yy6;
+               if(yych <= 0x09)        goto yy8;
+               goto yy4;
+       } else {
+               if(yych != '/') goto yy8;
+               goto yy2;
+       }
 yy2:   yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == '*') goto yy7;
+       if(yych == '*') goto yy9;
        goto yy3;
 yy3:
-#line 93 "scanner.re"
+#line 97 "scanner.re"
 { goto echo; }
-#line 26 "scanner.cc"
+#line 31 "scanner.cc"
 yy4:   ++YYCURSOR;
        goto yy5;
 yy5:
-#line 89 "scanner.re"
-{ if(cursor == eof) RETURN(0);
-                                 out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
+#line 92 "scanner.re"
+{ out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
                                  tok = pos = cursor; cline++;
                                  goto echo; }
-#line 35 "scanner.cc"
-yy6:   yych = *++YYCURSOR;
+#line 39 "scanner.cc"
+yy6:   ++YYCURSOR;
+       goto yy7;
+yy7:
+#line 95 "scanner.re"
+{ out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0
+                                 if(cursor == eof) { RETURN(0); } }
+#line 46 "scanner.cc"
+yy8:   yych = *++YYCURSOR;
        goto yy3;
-yy7:   yych = *++YYCURSOR;
-       if(yych == '!') goto yy9;
-       goto yy8;
-yy8:   YYCURSOR = YYMARKER;
+yy9:   yych = *++YYCURSOR;
+       if(yych == '!') goto yy11;
+       goto yy10;
+yy10:  YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy3;
        }
-yy9:   yych = *++YYCURSOR;
-       if(yych != 'r') goto yy8;
-       goto yy10;
-yy10:  yych = *++YYCURSOR;
-       if(yych != 'e') goto yy8;
-       goto yy11;
 yy11:  yych = *++YYCURSOR;
-       if(yych != '2') goto yy8;
+       if(yych != 'r') goto yy10;
        goto yy12;
 yy12:  yych = *++YYCURSOR;
-       if(yych != 'c') goto yy8;
+       if(yych != 'e') goto yy10;
        goto yy13;
-yy13:  ++YYCURSOR;
+yy13:  yych = *++YYCURSOR;
+       if(yych != '2') goto yy10;
        goto yy14;
-yy14:
-#line 86 "scanner.re"
+yy14:  yych = *++YYCURSOR;
+       if(yych != 'c') goto yy10;
+       goto yy15;
+yy15:  ++YYCURSOR;
+       goto yy16;
+yy16:
+#line 89 "scanner.re"
 { out.write((const char*)(tok), (const char*)(&cursor[-7]) - (const char*)(tok));
                                  tok = cursor;
                                  RETURN(1); }
-#line 64 "scanner.cc"
+#line 75 "scanner.cc"
 }
-#line 94 "scanner.re"
+#line 98 "scanner.re"
 
 }
 
@@ -150,487 +163,487 @@ scan:
     tline = cline;
     tok = cursor;
 
-#line 68 "scanner.cc"
+#line 79 "scanner.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept;
-       goto yy15;
-yy16:  ++YYCURSOR;
-yy15:
+       goto yy17;
+yy18:  ++YYCURSOR;
+yy17:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= '/'){
                if(yych <= '"'){
                        if(yych <= 0x0A){
-                               if(yych <= 0x08)        goto yy37;
-                               if(yych <= 0x09)        goto yy33;
-                               goto yy35;
+                               if(yych <= 0x08)        goto yy39;
+                               if(yych <= 0x09)        goto yy35;
+                               goto yy37;
                        } else {
-                               if(yych == ' ') goto yy33;
-                               if(yych <= '!') goto yy37;
-                               goto yy23;
+                               if(yych == ' ') goto yy35;
+                               if(yych <= '!') goto yy39;
+                               goto yy25;
                        }
                } else {
                        if(yych <= ')'){
-                               if(yych <= '&') goto yy37;
-                               if(yych <= '\'')        goto yy25;
-                               goto yy29;
+                               if(yych <= '&') goto yy39;
+                               if(yych <= '\'')        goto yy27;
+                               goto yy31;
                        } else {
-                               if(yych <= '*') goto yy21;
-                               if(yych <= '+') goto yy30;
-                               if(yych <= '.') goto yy37;
-                               goto yy19;
+                               if(yych <= '*') goto yy23;
+                               if(yych <= '+') goto yy32;
+                               if(yych <= '.') goto yy39;
+                               goto yy21;
                        }
                }
        } else {
                if(yych <= '@'){
                        if(yych <= '<'){
-                               if(yych == ';') goto yy29;
-                               goto yy37;
+                               if(yych == ';') goto yy31;
+                               goto yy39;
                        } else {
-                               if(yych <= '=') goto yy29;
-                               if(yych == '?') goto yy30;
-                               goto yy37;
+                               if(yych <= '=') goto yy31;
+                               if(yych == '?') goto yy32;
+                               goto yy39;
                        }
                } else {
                        if(yych <= '`'){
-                               if(yych <= 'Z') goto yy31;
-                               if(yych <= '[') goto yy27;
-                               if(yych <= '\\')        goto yy29;
-                               goto yy37;
+                               if(yych <= 'Z') goto yy33;
+                               if(yych <= '[') goto yy29;
+                               if(yych <= '\\')        goto yy31;
+                               goto yy39;
                        } else {
-                               if(yych <= 'z') goto yy31;
-                               if(yych <= '{') goto yy17;
-                               if(yych <= '|') goto yy29;
-                               goto yy37;
+                               if(yych <= 'z') goto yy33;
+                               if(yych <= '{') goto yy19;
+                               if(yych <= '|') goto yy31;
+                               goto yy39;
                        }
                }
        }
-yy17:  yyaccept = 0;
+yy19:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '/') goto yy18;
-       if(yych <= '9') goto yy63;
-       goto yy18;
-yy18:
-#line 107 "scanner.re"
+       if(yych <= '/') goto yy20;
+       if(yych <= '9') goto yy65;
+       goto yy20;
+yy20:
+#line 111 "scanner.re"
 { depth = 1;
                                  goto code;
                                }
-#line 134 "scanner.cc"
-yy19:  ++YYCURSOR;
-       if((yych = *YYCURSOR) == '*')   goto yy61;
-       goto yy20;
-yy20:
-#line 133 "scanner.re"
-{ RETURN(*tok); }
-#line 141 "scanner.cc"
+#line 145 "scanner.cc"
 yy21:  ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/')   goto yy59;
+       if((yych = *YYCURSOR) == '*')   goto yy63;
        goto yy22;
 yy22:
-#line 135 "scanner.re"
-{ yylval.op = *tok;
-                                 RETURN(CLOSE); }
-#line 149 "scanner.cc"
-yy23:  yyaccept = 1;
-       yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A)        goto yy55;
+#line 137 "scanner.re"
+{ RETURN(*tok); }
+#line 152 "scanner.cc"
+yy23:  ++YYCURSOR;
+       if((yych = *YYCURSOR) == '/')   goto yy61;
        goto yy24;
 yy24:
-#line 124 "scanner.re"
-{ fatal("unterminated string constant (missing \")"); }
-#line 157 "scanner.cc"
-yy25:  yyaccept = 2;
+#line 139 "scanner.re"
+{ yylval.op = *tok;
+                                 RETURN(CLOSE); }
+#line 160 "scanner.cc"
+yy25:  yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A)        goto yy50;
+       if(yych != 0x0A)        goto yy57;
        goto yy26;
 yy26:
-#line 125 "scanner.re"
-{ fatal("unterminated string constant (missing ')"); }
-#line 165 "scanner.cc"
-yy27:  yyaccept = 3;
+#line 128 "scanner.re"
+{ fatal("unterminated string constant (missing \")"); }
+#line 168 "scanner.cc"
+yy27:  yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A)        goto yy44;
+       if(yych != 0x0A)        goto yy52;
        goto yy28;
 yy28:
-#line 131 "scanner.re"
+#line 129 "scanner.re"
+{ fatal("unterminated string constant (missing ')"); }
+#line 176 "scanner.cc"
+yy29:  yyaccept = 3;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych != 0x0A)        goto yy46;
+       goto yy30;
+yy30:
+#line 135 "scanner.re"
 { fatal("unterminated range (missing ])"); }
-#line 173 "scanner.cc"
-yy29:  yych = *++YYCURSOR;
-       goto yy20;
-yy30:  yych = *++YYCURSOR;
+#line 184 "scanner.cc"
+yy31:  yych = *++YYCURSOR;
        goto yy22;
-yy31:  ++YYCURSOR;
-       yych = *YYCURSOR;
-       goto yy42;
-yy32:
-#line 150 "scanner.re"
-{ cur = cursor;
-                                 yylval.symbol = Symbol::find(token());
-                                 return ID; }
-#line 185 "scanner.cc"
+yy32:  yych = *++YYCURSOR;
+       goto yy24;
 yy33:  ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy40;
+       goto yy44;
 yy34:
 #line 154 "scanner.re"
-{ goto scan; }
-#line 191 "scanner.cc"
+{ cur = cursor;
+                                 yylval.symbol = Symbol::find(token());
+                                 return ID; }
+#line 196 "scanner.cc"
 yy35:  ++YYCURSOR;
-       goto yy36;
+       yych = *YYCURSOR;
+       goto yy42;
 yy36:
-#line 156 "scanner.re"
+#line 158 "scanner.re"
+{ goto scan; }
+#line 202 "scanner.cc"
+yy37:  ++YYCURSOR;
+       goto yy38;
+yy38:
+#line 160 "scanner.re"
 { if(cursor == eof) RETURN(0);
                                  pos = cursor; cline++;
                                  goto scan;
                                }
-#line 200 "scanner.cc"
-yy37:  ++YYCURSOR;
-       goto yy38;
-yy38:
-#line 161 "scanner.re"
+#line 211 "scanner.cc"
+yy39:  ++YYCURSOR;
+       goto yy40;
+yy40:
+#line 165 "scanner.re"
 { std::cerr << "unexpected character: " << *tok << std::endl;
                                  goto scan;
                                }
-#line 208 "scanner.cc"
-yy39:  ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
-       yych = *YYCURSOR;
-       goto yy40;
-yy40:  if(yych == 0x09)        goto yy39;
-       if(yych == ' ') goto yy39;
-       goto yy34;
+#line 219 "scanner.cc"
 yy41:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy42;
-yy42:  if(yych <= '@'){
-               if(yych <= '/') goto yy32;
-               if(yych <= '9') goto yy41;
-               goto yy32;
-       } else {
-               if(yych <= 'Z') goto yy41;
-               if(yych <= '`') goto yy32;
-               if(yych <= 'z') goto yy41;
-               goto yy32;
-       }
+yy42:  if(yych == 0x09)        goto yy41;
+       if(yych == ' ') goto yy41;
+       goto yy36;
 yy43:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy44;
-yy44:  if(yych <= '['){
-               if(yych != 0x0A)        goto yy43;
-               goto yy45;
+yy44:  if(yych <= '@'){
+               if(yych <= '/') goto yy34;
+               if(yych <= '9') goto yy43;
+               goto yy34;
        } else {
-               if(yych <= '\\')        goto yy46;
-               if(yych <= ']') goto yy47;
-               goto yy43;
+               if(yych <= 'Z') goto yy43;
+               if(yych <= '`') goto yy34;
+               if(yych <= 'z') goto yy43;
+               goto yy34;
        }
-yy45:  YYCURSOR = YYMARKER;
+yy45:  ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       goto yy46;
+yy46:  if(yych <= '['){
+               if(yych != 0x0A)        goto yy45;
+               goto yy47;
+       } else {
+               if(yych <= '\\')        goto yy48;
+               if(yych <= ']') goto yy49;
+               goto yy45;
+       }
+yy47:  YYCURSOR = YYMARKER;
        switch(yyaccept){
-       case 0: goto yy18;
-       case 1: goto yy24;
-       case 2: goto yy26;
-       case 3: goto yy28;
+       case 0: goto yy20;
+       case 1: goto yy26;
+       case 2: goto yy28;
+       case 3: goto yy30;
        }
-yy46:  ++YYCURSOR;
+yy48:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy45;
-       goto yy43;
-yy47:  ++YYCURSOR;
-       goto yy48;
-yy48:
-#line 127 "scanner.re"
+       if(yych == 0x0A)        goto yy47;
+       goto yy45;
+yy49:  ++YYCURSOR;
+       goto yy50;
+yy50:
+#line 131 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = ranToRE(token());
                                  return RANGE; }
-#line 265 "scanner.cc"
-yy49:  ++YYCURSOR;
+#line 276 "scanner.cc"
+yy51:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy50;
-yy50:  if(yych <= '&'){
-               if(yych == 0x0A)        goto yy45;
-               goto yy49;
-       } else {
-               if(yych <= '\'')        goto yy52;
-               if(yych != '\\')        goto yy49;
+       goto yy52;
+yy52:  if(yych <= '&'){
+               if(yych == 0x0A)        goto yy47;
                goto yy51;
+       } else {
+               if(yych <= '\'')        goto yy54;
+               if(yych != '\\')        goto yy51;
+               goto yy53;
        }
-yy51:  ++YYCURSOR;
+yy53:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy45;
-       goto yy49;
-yy52:  ++YYCURSOR;
-       goto yy53;
-yy53:
-#line 120 "scanner.re"
+       if(yych == 0x0A)        goto yy47;
+       goto yy51;
+yy54:  ++YYCURSOR;
+       goto yy55;
+yy55:
+#line 124 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = strToCaseInsensitiveRE(token());
                                  return STRING; }
-#line 292 "scanner.cc"
-yy54:  ++YYCURSOR;
+#line 303 "scanner.cc"
+yy56:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy55;
-yy55:  if(yych <= '!'){
-               if(yych == 0x0A)        goto yy45;
-               goto yy54;
-       } else {
-               if(yych <= '"') goto yy57;
-               if(yych != '\\')        goto yy54;
+       goto yy57;
+yy57:  if(yych <= '!'){
+               if(yych == 0x0A)        goto yy47;
                goto yy56;
+       } else {
+               if(yych <= '"') goto yy59;
+               if(yych != '\\')        goto yy56;
+               goto yy58;
        }
-yy56:  ++YYCURSOR;
+yy58:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy45;
-       goto yy54;
-yy57:  ++YYCURSOR;
-       goto yy58;
-yy58:
-#line 116 "scanner.re"
-{ cur = cursor;
-                                 yylval.regexp = strToRE(token());
-                                 return STRING; }
-#line 319 "scanner.cc"
+       if(yych == 0x0A)        goto yy47;
+       goto yy56;
 yy59:  ++YYCURSOR;
        goto yy60;
 yy60:
-#line 113 "scanner.re"
-{ tok = cursor;
-                                 RETURN(0); }
-#line 326 "scanner.cc"
+#line 120 "scanner.re"
+{ cur = cursor;
+                                 yylval.regexp = strToRE(token());
+                                 return STRING; }
+#line 330 "scanner.cc"
 yy61:  ++YYCURSOR;
        goto yy62;
 yy62:
-#line 110 "scanner.re"
+#line 117 "scanner.re"
+{ tok = cursor;
+                                 RETURN(0); }
+#line 337 "scanner.cc"
+yy63:  ++YYCURSOR;
+       goto yy64;
+yy64:
+#line 114 "scanner.re"
 { depth = 1;
                                  goto comment; }
-#line 333 "scanner.cc"
-yy63:  ++YYCURSOR;
+#line 344 "scanner.cc"
+yy65:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy64;
-yy64:  if(yych <= '/'){
-               if(yych == ',') goto yy67;
-               goto yy45;
+       goto yy66;
+yy66:  if(yych <= '/'){
+               if(yych == ',') goto yy69;
+               goto yy47;
        } else {
-               if(yych <= '9') goto yy63;
-               if(yych != '}') goto yy45;
-               goto yy65;
+               if(yych <= '9') goto yy65;
+               if(yych != '}') goto yy47;
+               goto yy67;
        }
-yy65:  ++YYCURSOR;
-       goto yy66;
-yy66:
-#line 138 "scanner.re"
+yy67:  ++YYCURSOR;
+       goto yy68;
+yy68:
+#line 142 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = atoi((char *)tok+1);
                                  RETURN(CLOSESIZE); }
-#line 354 "scanner.cc"
-yy67:  yych = *++YYCURSOR;
-       if(yych != '}') goto yy71;
-       goto yy68;
-yy68:  ++YYCURSOR;
-       goto yy69;
-yy69:
-#line 146 "scanner.re"
+#line 365 "scanner.cc"
+yy69:  yych = *++YYCURSOR;
+       if(yych != '}') goto yy73;
+       goto yy70;
+yy70:  ++YYCURSOR;
+       goto yy71;
+yy71:
+#line 150 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = -1;
                                  RETURN(CLOSESIZE); }
-#line 365 "scanner.cc"
-yy70:  ++YYCURSOR;
+#line 376 "scanner.cc"
+yy72:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy71;
-yy71:  if(yych <= '/') goto yy45;
-       if(yych <= '9') goto yy70;
-       if(yych != '}') goto yy45;
-       goto yy72;
-yy72:  ++YYCURSOR;
        goto yy73;
-yy73:
-#line 142 "scanner.re"
+yy73:  if(yych <= '/') goto yy47;
+       if(yych <= '9') goto yy72;
+       if(yych != '}') goto yy47;
+       goto yy74;
+yy74:  ++YYCURSOR;
+       goto yy75;
+yy75:
+#line 146 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                  RETURN(CLOSESIZE); }
-#line 382 "scanner.cc"
+#line 393 "scanner.cc"
 }
-#line 164 "scanner.re"
+#line 168 "scanner.re"
 
 
 code:
 
-#line 386 "scanner.cc"
+#line 397 "scanner.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept;
-       goto yy74;
-yy75:  ++YYCURSOR;
-yy74:
+       goto yy76;
+yy77:  ++YYCURSOR;
+yy76:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= '&'){
                if(yych <= 0x0A){
-                       if(yych <= 0x09)        goto yy82;
-                       goto yy80;
-               } else {
-                       if(yych == '"') goto yy84;
+                       if(yych <= 0x09)        goto yy84;
                        goto yy82;
+               } else {
+                       if(yych == '"') goto yy86;
+                       goto yy84;
                }
        } else {
                if(yych <= '{'){
-                       if(yych <= '\'')        goto yy85;
-                       if(yych <= 'z') goto yy82;
-                       goto yy78;
+                       if(yych <= '\'')        goto yy87;
+                       if(yych <= 'z') goto yy84;
+                       goto yy80;
                } else {
-                       if(yych != '}') goto yy82;
-                       goto yy76;
+                       if(yych != '}') goto yy84;
+                       goto yy78;
                }
        }
-yy76:  ++YYCURSOR;
-       goto yy77;
-yy77:
-#line 168 "scanner.re"
+yy78:  ++YYCURSOR;
+       goto yy79;
+yy79:
+#line 172 "scanner.re"
 { if(--depth == 0){
                                        cur = cursor;
                                        yylval.token = new Token(token(), tline);
                                        return CODE;
                                  }
                                  goto code; }
-#line 423 "scanner.cc"
-yy78:  ++YYCURSOR;
-       goto yy79;
-yy79:
-#line 174 "scanner.re"
-{ ++depth;
-                                 goto code; }
-#line 430 "scanner.cc"
+#line 434 "scanner.cc"
 yy80:  ++YYCURSOR;
        goto yy81;
 yy81:
-#line 176 "scanner.re"
-{ if(cursor == eof) fatal("missing '}'");
-                                 pos = cursor; cline++;
-                                 goto code;
-                               }
-#line 439 "scanner.cc"
+#line 178 "scanner.re"
+{ ++depth;
+                                 goto code; }
+#line 441 "scanner.cc"
 yy82:  ++YYCURSOR;
        goto yy83;
 yy83:
 #line 180 "scanner.re"
+{ if(cursor == eof) fatal("missing '}'");
+                                 pos = cursor; cline++;
+                                 goto code;
+                               }
+#line 450 "scanner.cc"
+yy84:  ++YYCURSOR;
+       goto yy85;
+yy85:
+#line 184 "scanner.re"
 { goto code; }
-#line 445 "scanner.cc"
-yy84:  yyaccept = 0;
+#line 456 "scanner.cc"
+yy86:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A)        goto yy83;
-       goto yy91;
-yy85:  yyaccept = 0;
+       if(yych == 0x0A)        goto yy85;
+       goto yy93;
+yy87:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A)        goto yy83;
-       goto yy87;
-yy86:  ++YYCURSOR;
+       if(yych == 0x0A)        goto yy85;
+       goto yy89;
+yy88:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy87;
-yy87:  if(yych <= '&'){
-               if(yych != 0x0A)        goto yy86;
-               goto yy88;
+       goto yy89;
+yy89:  if(yych <= '&'){
+               if(yych != 0x0A)        goto yy88;
+               goto yy90;
        } else {
-               if(yych <= '\'')        goto yy82;
-               if(yych == '\\')        goto yy89;
-               goto yy86;
+               if(yych <= '\'')        goto yy84;
+               if(yych == '\\')        goto yy91;
+               goto yy88;
        }
-yy88:  YYCURSOR = YYMARKER;
+yy90:  YYCURSOR = YYMARKER;
        switch(yyaccept){
-       case 0: goto yy83;
+       case 0: goto yy85;
        }
-yy89:  ++YYCURSOR;
+yy91:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy88;
-       goto yy86;
-yy90:  ++YYCURSOR;
+       if(yych == 0x0A)        goto yy90;
+       goto yy88;
+yy92:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy91;
-yy91:  if(yych <= '!'){
-               if(yych == 0x0A)        goto yy88;
-               goto yy90;
-       } else {
-               if(yych <= '"') goto yy82;
-               if(yych != '\\')        goto yy90;
+       goto yy93;
+yy93:  if(yych <= '!'){
+               if(yych == 0x0A)        goto yy90;
                goto yy92;
+       } else {
+               if(yych <= '"') goto yy84;
+               if(yych != '\\')        goto yy92;
+               goto yy94;
        }
-yy92:  ++YYCURSOR;
+yy94:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy88;
-       goto yy90;
+       if(yych == 0x0A)        goto yy90;
+       goto yy92;
 }
-#line 181 "scanner.re"
+#line 185 "scanner.re"
 
 
 comment:
 
-#line 499 "scanner.cc"
+#line 510 "scanner.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept;
-       goto yy93;
-yy94:  ++YYCURSOR;
-yy93:
+       goto yy95;
+yy96:  ++YYCURSOR;
+yy95:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= ')'){
-               if(yych == 0x0A)        goto yy98;
-               goto yy100;
+               if(yych == 0x0A)        goto yy100;
+               goto yy102;
        } else {
-               if(yych <= '*') goto yy95;
-               if(yych == '/') goto yy97;
-               goto yy100;
+               if(yych <= '*') goto yy97;
+               if(yych == '/') goto yy99;
+               goto yy102;
        }
-yy95:  ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/')   goto yy103;
-       goto yy96;
-yy96:
-#line 195 "scanner.re"
+yy97:  ++YYCURSOR;
+       if((yych = *YYCURSOR) == '/')   goto yy105;
+       goto yy98;
+yy98:
+#line 199 "scanner.re"
 { goto comment; }
-#line 522 "scanner.cc"
-yy97:  yych = *++YYCURSOR;
-       if(yych == '*') goto yy101;
-       goto yy96;
-yy98:  ++YYCURSOR;
-       goto yy99;
-yy99:
-#line 191 "scanner.re"
+#line 533 "scanner.cc"
+yy99:  yych = *++YYCURSOR;
+       if(yych == '*') goto yy103;
+       goto yy98;
+yy100: ++YYCURSOR;
+       goto yy101;
+yy101:
+#line 195 "scanner.re"
 { if(cursor == eof) RETURN(0);
                                  tok = pos = cursor; cline++;
                                  goto comment;
                                }
-#line 534 "scanner.cc"
-yy100: yych = *++YYCURSOR;
-       goto yy96;
-yy101: ++YYCURSOR;
-       goto yy102;
-yy102:
-#line 189 "scanner.re"
-{ ++depth;
-                                 goto comment; }
-#line 543 "scanner.cc"
+#line 545 "scanner.cc"
+yy102: yych = *++YYCURSOR;
+       goto yy98;
 yy103: ++YYCURSOR;
        goto yy104;
 yy104:
-#line 185 "scanner.re"
+#line 193 "scanner.re"
+{ ++depth;
+                                 goto comment; }
+#line 554 "scanner.cc"
+yy105: ++YYCURSOR;
+       goto yy106;
+yy106:
+#line 189 "scanner.re"
 { if(--depth == 0)
                                        goto scan;
                                    else
                                        goto comment; }
-#line 552 "scanner.cc"
+#line 563 "scanner.cc"
 }
-#line 196 "scanner.re"
+#line 200 "scanner.re"
 
 }
 
index 1ab6433bcc2bf4d0e5b907898caaa0bc4832d106..12f265ae882ef01629ee0c584173c95b10a35ad3 100644 (file)
@@ -55,7 +55,7 @@ char *Scanner::fill(char *cursor){
            bot = buf;
        }
        if((cnt = in.rdbuf()->sgetn((char*) lim, BSIZE)) != BSIZE){
-           eof = &lim[cnt]; *eof++ = '\n';
+           eof = &lim[cnt]; *eof++ = '\0';
        }
        lim += cnt;
     }
@@ -63,6 +63,7 @@ char *Scanner::fill(char *cursor){
 }
 
 /*!re2c
+zero           = "\000";
 any            = [\000-\377];
 dot            = any \ [\n];
 esc            = dot \ [\\];
@@ -78,7 +79,9 @@ int Scanner::echo(std::ostream &out){
 
     // Catch EOF
     if (eof && cursor == eof)
+       {
        return 0;
+       }
 
     tok = cursor;
 echo:
@@ -86,11 +89,12 @@ echo:
        "/*!re2c"               { out.write((const char*)(tok), (const char*)(&cursor[-7]) - (const char*)(tok));
                                  tok = cursor;
                                  RETURN(1); }
-       "\n"                    { if(cursor == eof) RETURN(0);
-                                 out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
+       "\n"                    { out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
                                  tok = pos = cursor; cline++;
                                  goto echo; }
-        any                    { goto echo; }
+       zero                    { out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0
+                                 if(cursor == eof) { RETURN(0); } }
+       any                     { goto echo; }
 */
 }