mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-11 05:13:04 +00:00
Split the default %destructor/%printer into two kinds: <*> and <!>.
Discussed starting at <http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00060.html>. * NEWS (2.3a+): Mention. * doc/bison.texinfo (Freeing Discarded Symbols): Document this and the previous change today related to mid-rules. (Bison Symbols): Remove %symbol-default and add <*> and <!>. * src/parser-gram.y (PERCENT_SYMBOL_DEFAULT): Remove. (TYPE_TAG_ANY): Add as <*>. (TYPE_TAG_NONE): Add as <!>. (generic_symlist_item): Remove RHS for %symbol-default and add RHS's for <*> and <!>. * src/scan-gram.l (PERCENT_SYMBOL_DEFAULT): Remove. (TYPE_TAG_ANY, TYPE_TAG_NONE): Add. * src/symlist.c (symbol_list_default_new): Split into tagged and tagless versions. (symbol_list_destructor_set, symbol_list_printer_set): Split SYMLIST_DEFAULT case into SYMLIST_DEFAULT_TAGGED and SYMLIST_DEFAULT_TAGLESS. * src/symlist.h: Update symbol_list_default*_new prototypes. (symbol_list.content_type): Split enum value SYMLIST_DEFAULT into SYMLIST_DEFAULT_TAGGED and SYMLIST_DEFAULT_TAGLESS. * src/symtab.c (default_destructor, default_destructor_location, default_printer, default_printer_location): Split each into tagged and tagless versions. (symbol_destructor_get, symbol_destructor_location_get, symbol_printer_get, symbol_printer_location_get): Implement tagged default and tagless default cases. (default_destructor_set, default_printer_set): Split each into tagged and tagless versions. * src/symtab.h: Update prototypes. * tests/actions.at (Default %printer and %destructor): Rename to... (Default tagless %printer and %destructor): ... this, and extend. (Per-type %printer and %destructor): Rename to... (Default tagged and per-type %printer and %destructor): ... this, and extend. (Default %printer and %destructor for user-defined end token): Extend. (Default %printer and %destructor are not for error or $undefined): Update. (Default %printer and %destructor are not for $accept): Update. (Default %printer and %destructor for mid-rule values): Extend. * tests/input.at (Default %printer and %destructor redeclared): Extend. (Unused values with default %destructor): Extend.
This commit is contained in:
@@ -178,33 +178,54 @@ AT_CLEANUP
|
||||
AT_SETUP([Default %printer and %destructor redeclared])
|
||||
|
||||
AT_DATA([[input.y]],
|
||||
[[%destructor { destroy ($$); } %symbol-default %symbol-default
|
||||
%printer { destroy ($$); } %symbol-default %symbol-default
|
||||
[[%destructor { destroy ($$); } <*> <*>
|
||||
%printer { destroy ($$); } <*> <*>
|
||||
|
||||
%destructor { destroy ($$); } %symbol-default
|
||||
%printer { destroy ($$); } %symbol-default
|
||||
%destructor { destroy ($$); } <*>
|
||||
%printer { destroy ($$); } <*>
|
||||
|
||||
%destructor { destroy ($$); } <!> <!>
|
||||
%printer { destroy ($$); } <!> <!>
|
||||
|
||||
%destructor { destroy ($$); } <!>
|
||||
%printer { destroy ($$); } <!>
|
||||
|
||||
%%
|
||||
|
||||
start: ;
|
||||
|
||||
%destructor { destroy ($$); } %symbol-default;
|
||||
%printer { destroy ($$); } %symbol-default;
|
||||
%destructor { destroy ($$); } <*>;
|
||||
%printer { destroy ($$); } <*>;
|
||||
|
||||
%destructor { destroy ($$); } <!>;
|
||||
%printer { destroy ($$); } <!>;
|
||||
]])
|
||||
|
||||
AT_CHECK([bison input.y], [1], [],
|
||||
[[input.y:1.13-29: redeclaration for default %destructor
|
||||
[[input.y:1.13-29: redeclaration for default tagged %destructor
|
||||
input.y:1.13-29: previous declaration
|
||||
input.y:2.10-26: redeclaration for default %printer
|
||||
input.y:2.10-26: redeclaration for default tagged %printer
|
||||
input.y:2.10-26: previous declaration
|
||||
input.y:4.13-29: redeclaration for default %destructor
|
||||
input.y:4.13-29: redeclaration for default tagged %destructor
|
||||
input.y:1.13-29: previous declaration
|
||||
input.y:5.10-26: redeclaration for default %printer
|
||||
input.y:5.10-26: redeclaration for default tagged %printer
|
||||
input.y:2.10-26: previous declaration
|
||||
input.y:11.13-29: redeclaration for default %destructor
|
||||
input.y:7.13-29: redeclaration for default tagless %destructor
|
||||
input.y:7.13-29: previous declaration
|
||||
input.y:8.10-26: redeclaration for default tagless %printer
|
||||
input.y:8.10-26: previous declaration
|
||||
input.y:10.13-29: redeclaration for default tagless %destructor
|
||||
input.y:7.13-29: previous declaration
|
||||
input.y:11.10-26: redeclaration for default tagless %printer
|
||||
input.y:8.10-26: previous declaration
|
||||
input.y:17.13-29: redeclaration for default tagged %destructor
|
||||
input.y:4.13-29: previous declaration
|
||||
input.y:12.10-26: redeclaration for default %printer
|
||||
input.y:18.10-26: redeclaration for default tagged %printer
|
||||
input.y:5.10-26: previous declaration
|
||||
input.y:20.13-29: redeclaration for default tagless %destructor
|
||||
input.y:10.13-29: previous declaration
|
||||
input.y:21.10-26: redeclaration for default tagless %printer
|
||||
input.y:11.10-26: previous declaration
|
||||
]])
|
||||
|
||||
AT_CLEANUP
|
||||
@@ -260,18 +281,36 @@ AT_CLEANUP
|
||||
AT_SETUP([Unused values with default %destructor])
|
||||
|
||||
AT_DATA([[input.y]],
|
||||
[[%destructor { destroy ($$); } %symbol-default
|
||||
[[%destructor { destroy ($$); } <!>
|
||||
%type <tag> tagged
|
||||
|
||||
%%
|
||||
|
||||
start: end end { $1; } ;
|
||||
end: { } ;
|
||||
start: end end tagged tagged { $<tag>1; $3; } ;
|
||||
end: { } ;
|
||||
tagged: { } ;
|
||||
]])
|
||||
|
||||
AT_CHECK([bison input.y], [0], [],
|
||||
[[input.y:5.8-22: warning: unset value: $$
|
||||
input.y:5.8-22: warning: unused value: $2
|
||||
input.y:6.6-8: warning: unset value: $$
|
||||
[[input.y:6.8-45: warning: unset value: $$
|
||||
input.y:6.8-45: warning: unused value: $2
|
||||
input.y:7.6-8: warning: unset value: $$
|
||||
]])
|
||||
|
||||
AT_DATA([[input.y]],
|
||||
[[%destructor { destroy ($$); } <*>
|
||||
%type <tag> tagged
|
||||
|
||||
%%
|
||||
|
||||
start: end end tagged tagged { $<tag>1; $3; } ;
|
||||
end: { } ;
|
||||
tagged: { } ;
|
||||
]])
|
||||
|
||||
AT_CHECK([bison input.y], [0], [],
|
||||
[[input.y:6.8-45: warning: unused value: $4
|
||||
input.y:8.9-11: warning: unset value: $$
|
||||
]])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
Reference in New Issue
Block a user