]> git.saurik.com Git - bison.git/blobdiff - src/scan-gram.l
%define variables: backward compatibility
[bison.git] / src / scan-gram.l
index f5c9b88f013463dac4f9931c55531333e86aca3c..d02b26bb618983734e4327ac88ed68762a1ec557 100644 (file)
@@ -193,7 +193,7 @@ eqopt    ([[:space:]]*=)?
 
   /* #line directives are not documented, and may be withdrawn or
      modified in future versions of Bison.  */
-  ^"#line "{int}" \"".*"\"\n" {
+  ^"#line "{int}(" \"".*"\"")?"\n" {
     handle_syncline (yytext + sizeof "#line " - 1, *loc);
   }
 }
@@ -974,23 +974,27 @@ convert_ucn_to_byte (char const *ucn)
 }
 
 
-/*----------------------------------------------------------------.
-| Handle '#line INT "FILE"'.  ARGS has already skipped '#line '.  |
-`----------------------------------------------------------------*/
+/*---------------------------------------------------------------------.
+| Handle '#line INT( "FILE")?\n'.  ARGS has already skipped '#line '.  |
+`---------------------------------------------------------------------*/
 
 static void
 handle_syncline (char *args, location loc)
 {
-  char *after_num;
-  unsigned long int lineno = strtoul (args, &after_num, 10);
-  char *file = strchr (after_num, '"') + 1;
-  *strchr (file, '"') = '\0';
+  char *file;
+  unsigned long int lineno = strtoul (args, &file, 10);
   if (INT_MAX <= lineno)
     {
       complain (&loc, Wother, _("line number overflow"));
       lineno = INT_MAX;
     }
-  current_file = uniqstr_new (file);
+
+  file = strchr (file, '"');
+  if (file)
+    {
+      *strchr (file + 1, '"') = '\0';
+      current_file = uniqstr_new (file + 1);
+    }
   boundary_set (&scanner_cursor, current_file, lineno, 1);
 }
 
@@ -1008,7 +1012,7 @@ unexpected_end (boundary start, char const *msgid, char const *token_end)
   loc.start = start;
   loc.end = scanner_cursor;
   token_end = quote (token_end);
-  // Instead of '\'', display "'".
+  /* Instead of '\'', display "'".  */
   if (STREQ (token_end, "'\\''"))
     token_end = "\"'\"";
   complain (&loc, complaint, _(msgid), token_end);