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:
Joel E. Denny
2006-10-21 10:03:35 +00:00
parent f91b162944
commit 12e3584054
13 changed files with 870 additions and 602 deletions

View File

@@ -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