Improve the change to allow parsing 9%a
If there was a later syntax error, this could incorrectly get reported as: Error: Unknown directive '%a'.
This commit is contained in:
parent
8f54f6180a
commit
8cd2cfa9d1
3 changed files with 24 additions and 3 deletions
20
Examples/test-suite/errors/pp_unknowndirective5.i
Normal file
20
Examples/test-suite/errors/pp_unknowndirective5.i
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
%module xxx
|
||||
|
||||
/* Before SWIG 4.1.0 the `9%a` expression triggered:
|
||||
*
|
||||
* Error: Unknown directive '%a'
|
||||
*
|
||||
* The fix for that works by handling an apparent directive that isn't a
|
||||
* recognised directive by noting down its name, emitting MODULO and then
|
||||
* rescanning what follows, and if the parser then gives a syntax error we
|
||||
* report it as an unknown directive.
|
||||
*
|
||||
* However the initial version of this failed to reset the noted down apparent
|
||||
* directive often enough, so a later syntax error could get incorrectly
|
||||
* reported. Here the syntax error in the declaration of `c` was confusingly
|
||||
* reported as `Error: Unknown directive '%a'`. This was found and fixed prior
|
||||
* to 4.1.0.
|
||||
*/
|
||||
int a;
|
||||
int test2(int b = 9%a) { return b; }
|
||||
void int c;
|
||||
1
Examples/test-suite/errors/pp_unknowndirective5.stderr
Normal file
1
Examples/test-suite/errors/pp_unknowndirective5.stderr
Normal file
|
|
@ -0,0 +1 @@
|
|||
pp_unknowndirective5.i:18: Error: Syntax error in input(1).
|
||||
|
|
@ -573,6 +573,9 @@ int yylex(void) {
|
|||
scanner_init();
|
||||
}
|
||||
|
||||
Delete(cparse_unknown_directive);
|
||||
cparse_unknown_directive = NULL;
|
||||
|
||||
if (next_token) {
|
||||
l = next_token;
|
||||
next_token = 0;
|
||||
|
|
@ -951,9 +954,6 @@ int yylex(void) {
|
|||
return (yylex());
|
||||
|
||||
} else {
|
||||
Delete(cparse_unknown_directive);
|
||||
cparse_unknown_directive = NULL;
|
||||
|
||||
/* SWIG directives */
|
||||
if (strcmp(yytext, "%module") == 0)
|
||||
return (MODULE);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue