[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 3/3] parser: accept #line NUM
From: |
Akim Demaille |
Subject: |
[PATCH 3/3] parser: accept #line NUM |
Date: |
Mon, 3 Dec 2012 16:05:44 +0100 |
* src/scan-gram.l (scanner): Accept '#line NUM'.
(handle_syncline): Adjust to the possible missing file name.
---
src/scan-gram.l | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/scan-gram.l b/src/scan-gram.l
index fd6458f..5e78cb9 100644
--- a/src/scan-gram.l
+++ b/src/scan-gram.l
@@ -157,7 +157,7 @@ splice (\\[ \f\t\v]*\n)*
/* #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);
}
}
@@ -845,23 +845,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 = mbschr (after_num, '"') + 1;
- *mbschr (file, '"') = '\0';
+ char *file;
+ unsigned long int lineno = strtoul (args, &file, 10);
if (INT_MAX <= lineno)
{
warn_at (loc, _("line number overflow"));
lineno = INT_MAX;
}
- current_file = uniqstr_new (file);
+
+ file = mbschr (file, '"');
+ if (file)
+ {
+ *mbschr (file + 1, '"') = '\0';
+ current_file = uniqstr_new (file + 1);
+ }
boundary_set (&scanner_cursor, current_file, lineno, 1);
}
--
1.8.0.1