]> git.saurik.com Git - bison.git/commitdiff
* tests/regression.at (Invalid input): New.
authorAkim Demaille <akim@epita.fr>
Tue, 2 Oct 2001 15:52:24 +0000 (15:52 +0000)
committerAkim Demaille <akim@epita.fr>
Tue, 2 Oct 2001 15:52:24 +0000 (15:52 +0000)
* src/lex.c (lex): Be sure to set `token_buffer' in any case.
Reported by Shura.

ChangeLog
src/lex.c
tests/regression.at

index 65895284ae2f247cbbcc012fb94af7a1b3b77565..47bbaada0ec3969fb9fc5c21acb379e7537a3247 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2001-10-02  Akim Demaille  <akim@epita.fr>
+
+       * tests/regression.at (Invalid input): New.
+       * src/lex.c (lex): Be sure to set `token_buffer' in any case.
+       Reported by Shura.
+
 2001-10-02  Akim Demaille  <akim@epita.fr>
 
        * tests/calc.at: Now that --debug works, the tests must be adjusted.
index dc1e6be04a2474c65947c2a210196e71bf0a8099..d8aa6f89cf2f8808f8945f334842753c72bffaf5 100644 (file)
--- a/src/lex.c
+++ b/src/lex.c
@@ -469,32 +469,40 @@ lex (void)
       }
 
     case ',':
+      token_buffer = ",";
       return tok_comma;
 
     case ':':
+      token_buffer = ":";
       return tok_colon;
 
     case ';':
+      token_buffer = ";";
       return tok_semicolon;
 
     case '|':
+      token_buffer = "|";
       return tok_bar;
 
     case '{':
+      token_buffer = "{";
       return tok_left_curly;
 
     case '=':
+      obstack_1grow (&token_obstack, c);
       do
        {
          c = getc (finput);
+         obstack_1grow (&token_obstack, c);
          if (c == '\n')
            lineno++;
        }
       while (c == ' ' || c == '\n' || c == '\t');
+      obstack_1grow (&token_obstack, '\0');
+      token_buffer = obstack_finish (&token_obstack);
 
       if (c == '{')
        {
-         token_buffer = "={";
          return tok_left_curly;
        }
       else
@@ -511,6 +519,9 @@ lex (void)
       return parse_percent_token ();
 
     default:
+      obstack_1grow (&token_obstack, c);
+      obstack_1grow (&token_obstack, '\0');
+      token_buffer = obstack_finish (&token_obstack);
       return tok_illegal;
     }
 }
index 619a1dcdc7a8a159d57b9fb2455039c55b72a6c8..9045e226783d60d48284c25f990fd4da8ded7628 100644 (file)
@@ -74,7 +74,7 @@ AT_CLEANUP([union.*])
 AT_SETUP([%union and C comments])
 
 AT_DATA([union-comment.y],
-[%union        
+[%union
 {
   /* The int.  */      int   integer;
   /* The string.  */   char *string ;
@@ -87,3 +87,23 @@ AT_CHECK([bison union-comment.y])
 AT_CHECK([fgrep '//*' union-comment.tab.c], [1], [])
 
 AT_CLEANUP([union-comment.*])
+
+
+## --------------- ##
+## invalid input.  ##
+## --------------- ##
+
+
+AT_SETUP([Invalid input])
+
+AT_DATA([input.y],
+[[%%
+?
+]])
+
+AT_CHECK([bison input.y], [1], [],
+[input.y:2: invalid input: `?'
+input.y:3: fatal error: no rules in the input grammar
+])
+
+AT_CLEANUP