]> granicus.if.org Git - re2c/commitdiff
- Fix [ 1022799 ] re2c scanner has buffering bug
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Fri, 8 Apr 2005 16:06:13 +0000 (16:06 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Fri, 8 Apr 2005 16:06:13 +0000 (16:06 +0000)
13 files changed:
code.cc
test/c.c
test/cmmap.c
test/cnokw.c
test/cunroll.c
test/input1.c
test/input2.c
test/input3.c
test/modula.c
test/repeater.c
test/sample.c
test/scanner.c
test/simple.c

diff --git a/code.cc b/code.cc
index 8375b9916e64cb89cf1c401679dc4fcdc57867e8..fbf1229fd17515422eca0a54761195b3e0ef1b39 100644 (file)
--- a/code.cc
+++ b/code.cc
@@ -994,12 +994,12 @@ void DFA::emit(std::ostream &o)
 
        findSCCs();
        head->link = head;
-       head->depth = maxDist(head);
 
        uint nRules = 0;
 
        for (s = head; s; s = s->next)
        {
+               s->depth = maxDist(s);
                if (s->rule && s->rule->accept >= nRules)
                {
                        nRules = s->rule->accept + 1;
index 8866e54cadd490fcf4e48e869addd609f0cfd96c..e240f3d12feb5f67c81d783086bb498d283d2c27 100644 (file)
--- a/test/c.c
+++ b/test/c.c
@@ -131,7 +131,7 @@ std:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 9) YYFILL(9);
        yych = *YYCURSOR;
@@ -826,7 +826,7 @@ yy131:      yych = *++YYCURSOR;
        }
 yy132: yyaccept = 3;
        YYMARKER = ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        goto yy133;
 yy133: switch(yych){
@@ -1014,7 +1014,7 @@ yy151:    yyaccept = 3;
        }
 yy152: yyaccept = 0;
        YYMARKER = ++YYCURSOR;
-       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
        yych = *YYCURSOR;
        goto yy153;
 yy153: switch(yych){
@@ -1090,7 +1090,7 @@ yy159:    switch(yych){
        }
 yy160: yyaccept = 3;
        YYMARKER = ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        goto yy161;
 yy161: switch(yych){
@@ -4032,7 +4032,7 @@ comment:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy343;
-yy344: ++YYCURSOR;
+       ++YYCURSOR;
 yy343:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
index 00c9d7648337062d5ed7eef65e566c3f92f76521..9c9edea53b1837a1273b6afeca31fccf2b0a3714 100644 (file)
@@ -114,7 +114,7 @@ std:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 9) YYFILL(9);
        yych = *YYCURSOR;
@@ -809,7 +809,7 @@ yy131:      yych = *++YYCURSOR;
        }
 yy132: yyaccept = 3;
        YYMARKER = ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        goto yy133;
 yy133: switch(yych){
@@ -997,7 +997,7 @@ yy151:      yyaccept = 3;
        }
 yy152: yyaccept = 0;
        YYMARKER = ++YYCURSOR;
-       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
        yych = *YYCURSOR;
        goto yy153;
 yy153: switch(yych){
@@ -1073,7 +1073,7 @@ yy159:    switch(yych){
        }
 yy160: yyaccept = 3;
        YYMARKER = ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        goto yy161;
 yy161: switch(yych){
@@ -4015,7 +4015,7 @@ comment:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy343;
-yy344: ++YYCURSOR;
+       ++YYCURSOR;
 yy343:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
index fcdd7285952cb90356162dd167666c87f5b753cd..cf5e22155b5ade8c631225583ff9aa47690ab5ed 100644 (file)
@@ -131,7 +131,7 @@ std:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
        yych = *YYCURSOR;
@@ -745,7 +745,7 @@ yy116:      yych = *++YYCURSOR;
        }
 yy117: yyaccept = 3;
        YYMARKER = ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        goto yy118;
 yy118: switch(yych){
@@ -933,7 +933,7 @@ yy136:      yyaccept = 3;
        }
 yy137: yyaccept = 0;
        YYMARKER = ++YYCURSOR;
-       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
        yych = *YYCURSOR;
        goto yy138;
 yy138: switch(yych){
@@ -1009,7 +1009,7 @@ yy144:    switch(yych){
        }
 yy145: yyaccept = 3;
        YYMARKER = ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        goto yy146;
 yy146: switch(yych){
@@ -1300,7 +1300,7 @@ comment:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy170;
-yy171: ++YYCURSOR;
+       ++YYCURSOR;
 yy170:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
index 4ae3cd053a0edfa9e9d6d414ef2ea66825802c92..80d360136a20aac1c9199cc4864ce7f46c214d4a 100644 (file)
@@ -131,7 +131,7 @@ std:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 9) YYFILL(9);
        yych = *YYCURSOR;
@@ -806,7 +806,7 @@ yy116:      yych = *++YYCURSOR;
        }
 yy117: yyaccept = 3;
        YYMARKER = ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        goto yy118;
 yy118: switch(yych){
@@ -994,7 +994,7 @@ yy136:      yyaccept = 3;
        }
 yy137: yyaccept = 0;
        YYMARKER = ++YYCURSOR;
-       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
        yych = *YYCURSOR;
        goto yy138;
 yy138: switch(yych){
@@ -1070,7 +1070,7 @@ yy144:    switch(yych){
        }
 yy145: yyaccept = 3;
        YYMARKER = ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        goto yy146;
 yy146: switch(yych){
@@ -1841,7 +1841,7 @@ comment:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy185;
-yy186: ++YYCURSOR;
+       ++YYCURSOR;
 yy185:
        if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
        yych = *YYCURSOR;
index d5156992d7c13b669bf146f5dd6f235b529007c2..1bca641ff8540d961b77f155e907cbc38fb8e4c1 100644 (file)
@@ -6,7 +6,7 @@
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
@@ -27,7 +27,7 @@ yy3:
 yy4:   yych = *++YYCURSOR;
        goto yy3;
 yy5:   ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        goto yy6;
 yy6:   switch(yych){
index 7076382646b088a6e51c0384642cd21a9bbb383c..6517d063271f58a3b6e62499322944e30cd60ed3 100644 (file)
@@ -6,7 +6,7 @@
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -15,7 +15,7 @@ yy0:
        default:        goto yy2;
        }
 yy2:yy3:       ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        goto yy4;
 yy4:   switch(yych){
index f3a80ae1304f40931bfa1793986d68287c9661b9..6e6b31bd927cdcf9dd7f9ea052e674e7e9681b9a 100644 (file)
@@ -6,7 +6,7 @@
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -15,7 +15,7 @@ yy0:
        default:        goto yy2;
        }
 yy2:yy3:       ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        goto yy4;
 yy4:   switch(yych){
index 485dcbecd5144d6b2bbf974311df0ba02cf7aee1..015ba33da15d1a0b0788d0d0da7e95bca354d68d 100644 (file)
@@ -68,7 +68,7 @@ std:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 15) YYFILL(15);
        yych = *YYCURSOR;
@@ -3825,7 +3825,7 @@ yy276:
 #line 3769 "<stdout>"
 yy277: yyaccept = 0;
        YYMARKER = ++YYCURSOR;
-       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
        yych = *YYCURSOR;
        goto yy278;
 yy278: switch(yych){
@@ -3886,7 +3886,7 @@ yy284:    YYCURSOR -= 2;
 #line 3831 "<stdout>"
 yy285: yyaccept = 2;
        YYMARKER = ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        goto yy286;
 yy286: switch(yych){
@@ -4040,7 +4040,7 @@ comment:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy299;
-yy300: ++YYCURSOR;
+       ++YYCURSOR;
 yy299:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
index 95503f165a1652719aa9c8ebdbb8bb9f0fd483da..3996dcf75d3ef013bc771fd7a796a089e76f8ab5 100644 (file)
@@ -20,7 +20,7 @@ char *q;
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
        yych = *YYCURSOR;
index 4d943e1c0272151cf40cd43119a074d96e86e997..a2bc6974177e21fc3638d20a0620964859579c50 100644 (file)
@@ -6,7 +6,7 @@
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
        yych = *YYCURSOR;
index 438dc2989a4f3e5d68c387f3d43d4e7d1287da52..68535291eca5586f4c4c5f9a72e0cf56654420a9 100644 (file)
@@ -80,7 +80,7 @@ echo:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
        yych = *YYCURSOR;
@@ -167,7 +167,7 @@ scan:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy15;
-yy16:  ++YYCURSOR;
+       ++YYCURSOR;
 yy15:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
@@ -515,7 +515,7 @@ yy62:
                                  goto comment; }
 #line 439 "<stdout>"
 yy63:  ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        goto yy64;
 yy64:  switch(yych){
@@ -591,7 +591,7 @@ code:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy74;
-yy75:  ++YYCURSOR;
+       ++YYCURSOR;
 yy74:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
@@ -697,7 +697,7 @@ comment:
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy93;
-yy94:  ++YYCURSOR;
+       ++YYCURSOR;
 yy93:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
index 5f254c6be9f2be8815d78b1b7fa22f7037d2819f..6c0a372a685ca8d62cb398ea13a46703488247cb 100644 (file)
@@ -14,7 +14,7 @@ char *q;
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
-yy1:   ++YYCURSOR;
+       ++YYCURSOR;
 yy0:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;