mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
parser: accept #line NUM
* src/scan-gram.l (scanner): Accept '#line NUM'. (handle_syncline): Adjust to the possible missing file name.
This commit is contained in:
@@ -157,7 +157,7 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
|
|
||||||
/* #line directives are not documented, and may be withdrawn or
|
/* #line directives are not documented, and may be withdrawn or
|
||||||
modified in future versions of Bison. */
|
modified in future versions of Bison. */
|
||||||
^"#line "{int}" \"".*"\"\n" {
|
^"#line "{int}(" \"".*"\"")?"\n" {
|
||||||
handle_syncline (yytext + sizeof "#line " - 1, *loc);
|
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
|
static void
|
||||||
handle_syncline (char *args, location loc)
|
handle_syncline (char *args, location loc)
|
||||||
{
|
{
|
||||||
char *after_num;
|
char *file;
|
||||||
unsigned long int lineno = strtoul (args, &after_num, 10);
|
unsigned long int lineno = strtoul (args, &file, 10);
|
||||||
char *file = mbschr (after_num, '"') + 1;
|
|
||||||
*mbschr (file, '"') = '\0';
|
|
||||||
if (INT_MAX <= lineno)
|
if (INT_MAX <= lineno)
|
||||||
{
|
{
|
||||||
warn_at (loc, _("line number overflow"));
|
warn_at (loc, _("line number overflow"));
|
||||||
lineno = INT_MAX;
|
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);
|
boundary_set (&scanner_cursor, current_file, lineno, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user