diff options
author | Akim Demaille <akim.demaille@gmail.com> | 2020-08-01 08:51:24 +0200 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2020-08-01 08:54:46 +0200 |
commit | cb655534494201ff80af8adc885ae46998fcb6b3 (patch) | |
tree | 3f85a612a2a990fa8ae3981f73b3e1c53b7bf932 | |
parent | f47a1bd622b8aee8838ae56cea296f2ee99c4ad1 (diff) | |
download | bison-cb655534494201ff80af8adc885ae46998fcb6b3.tar.gz |
diagnostics: better location for type redeclarations
From
foo.y:1.7-11: error: %type redeclaration for bar
1 | %type <foo> bar bar
| ^~~~~
foo.y:1.7-11: note: previous declaration
1 | %type <foo> bar bar
| ^~~~~
to
foo.y:1.17-19: error: %type redeclaration for bar
1 | %type <foo> bar bar
| ^~~
foo.y:1.13-15: note: previous declaration
1 | %type <foo> bar bar
| ^~~
* src/symlist.h, src/symlist.c (symbol_list_type_set): There's no need
for the tag's location, use that of the symbol.
* src/parse-gram.y: Adjust.
* tests/input.at: Adjust.
-rw-r--r-- | NEWS | 8 | ||||
-rw-r--r-- | src/parse-gram.y | 12 | ||||
-rw-r--r-- | src/symlist.c | 4 | ||||
-rw-r--r-- | src/symlist.h | 3 | ||||
-rw-r--r-- | tests/input.at | 8 |
5 files changed, 21 insertions, 14 deletions
@@ -2,8 +2,16 @@ GNU Bison NEWS * Noteworthy changes in release ?.? (????-??-??) [?] +** Bug fixes + + Fixed a crash when a token alias contains a NUL byte. + +** Changes + Improvements and fixes in the documentation. + More precise location about symbol type redefinitions. + * Noteworthy changes in release 3.7 (2020-07-23) [stable] diff --git a/src/parse-gram.y b/src/parse-gram.y index fc046f60..269f776e 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -532,11 +532,11 @@ token_decls: } | TAG token_decl.1[syms] { - $$ = symbol_list_type_set ($syms, $TAG, @TAG); + $$ = symbol_list_type_set ($syms, $TAG); } | token_decls TAG token_decl.1[syms] { - $$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG, @TAG)); + $$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG)); } ; @@ -592,11 +592,11 @@ token_decls_for_prec: } | TAG token_decl_for_prec.1[syms] { - $$ = symbol_list_type_set ($syms, $TAG, @TAG); + $$ = symbol_list_type_set ($syms, $TAG); } | token_decls_for_prec TAG token_decl_for_prec.1[syms] { - $$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG, @TAG)); + $$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG)); } ; @@ -632,11 +632,11 @@ symbol_decls: } | TAG symbol_decl.1[syms] { - $$ = symbol_list_type_set ($syms, $TAG, @TAG); + $$ = symbol_list_type_set ($syms, $TAG); } | symbol_decls TAG symbol_decl.1[syms] { - $$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG, @TAG)); + $$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG)); } ; diff --git a/src/symlist.c b/src/symlist.c index 9bb0deaa..55c1fb6b 100644 --- a/src/symlist.c +++ b/src/symlist.c @@ -83,10 +83,10 @@ symbol_list_type_new (uniqstr type_name, location loc) symbol_list * -symbol_list_type_set (symbol_list *syms, uniqstr type_name, location loc) +symbol_list_type_set (symbol_list *syms, uniqstr type_name) { for (symbol_list *l = syms; l; l = l->next) - symbol_type_set (l->content.sym, type_name, loc); + symbol_type_set (l->content.sym, type_name, l->sym_loc); return syms; } diff --git a/src/symlist.h b/src/symlist.h index d94b7aa1..39fdec40 100644 --- a/src/symlist.h +++ b/src/symlist.h @@ -110,8 +110,7 @@ symbol_list *symbol_list_type_new (uniqstr type_name, location loc); /** Assign the type \c type_name to all the members of \c syms. ** \returns \c syms */ -symbol_list *symbol_list_type_set (symbol_list *syms, - uniqstr type_name, location loc); +symbol_list *symbol_list_type_set (symbol_list *syms, uniqstr type_name); /** Print this list. diff --git a/tests/input.at b/tests/input.at index effcd1cc..f5035c3c 100644 --- a/tests/input.at +++ b/tests/input.at @@ -1252,12 +1252,12 @@ AT_TEST([[%token foo "foo" %% exp: foo; ]], -[[input.y:3.7-11: error: %type redeclaration for foo +[[input.y:3.13-15: error: %type redeclaration for foo 3 | %type <baz> foo - | ^~~~~ -input.y:2.7-11: note: previous declaration + | ^~~ +input.y:2.13-17: note: previous declaration 2 | %type <bar> "foo" - | ^~~~~ + | ^~~~~ ]]) AT_TEST([[%token foo "foo" |