Complain about unused %define variables and %code qualifiers.

* NEWS (2.5): Document.
* data/bison.m4 (b4_check_user_names): Complain instead of warn.
* doc/bison.texinfo (Decl Summary): Document complaint, and
improve %define documentation a little otherwise.
* tests/input.at (Reject unused %code qualifiers): Update.
(%define errors): Update.
(%define, --define, --force-define): Update.
(%define backward compatibility): Update.
(Unused %define api.pure): Update.
* tests/push.at (Push Parsing: Unsupported Skeletons): Update.
(cherry picked from commit c6abeab182)

Conflicts:

	ChangeLog
This commit is contained in:
Joel E. Denny
2009-09-03 16:04:10 -04:00
parent c842365a01
commit 628be6c97d
6 changed files with 82 additions and 60 deletions

View File

@@ -1,3 +1,17 @@
2009-09-03 Joel E. Denny <jdenny@clemson.edu>
Complain about unused %define variables and %code qualifiers.
* NEWS (2.5): Document.
* data/bison.m4 (b4_check_user_names): Complain instead of warn.
* doc/bison.texinfo (Decl Summary): Document complaint, and
improve %define documentation a little otherwise.
* tests/input.at (Reject unused %code qualifiers): Update.
(%define errors): Update.
(%define, --define, --force-define): Update.
(%define backward compatibility): Update.
(Unused %define api.pure): Update.
* tests/push.at (Push Parsing: Unsupported Skeletons): Update.
2009-09-03 Joel E. Denny <jdenny@clemson.edu> 2009-09-03 Joel E. Denny <jdenny@clemson.edu>
Use aver not assert. Use aver not assert.

4
NEWS
View File

@@ -33,8 +33,12 @@ Bison News
These features are experimental. More user feedback will help to These features are experimental. More user feedback will help to
stabilize them. stabilize them.
** Unrecognized %code qualifiers are now an error not a warning.
** %define improvements. ** %define improvements.
*** Unrecognized variables are now an error not a warning.
*** Multiple invocations for any variable is now an error not a warning. *** Multiple invocations for any variable is now an error not a warning.
*** Can now be invoked via the command line. *** Can now be invoked via the command line.

View File

@@ -312,10 +312,10 @@ b4_define_user_code([stype])
# b4_check_user_names(WHAT, USER-LIST, BISON-NAMESPACE) # b4_check_user_names(WHAT, USER-LIST, BISON-NAMESPACE)
# -------------------------------------------------------- # -----------------------------------------------------
# Warn if any name of type WHAT is used by the user (as recorded in USER-LIST) # Complain if any name of type WHAT is used by the user (as recorded in
# but is not used by Bison (as recorded by macros in the namespace # USER-LIST) but is not used by Bison (as recorded by macros in the
# BISON-NAMESPACE). # namespace BISON-NAMESPACE).
# #
# USER-LIST must expand to a list specifying all user occurrences of all names # USER-LIST must expand to a list specifying all user occurrences of all names
# of type WHAT. Each item in the list must be a triplet specifying one # of type WHAT. Each item in the list must be a triplet specifying one
@@ -353,9 +353,9 @@ m4_pushdef([b4_user_name], m4_car(b4_occurrence))dnl
m4_pushdef([b4_start], m4_car(m4_shift(b4_occurrence)))dnl m4_pushdef([b4_start], m4_car(m4_shift(b4_occurrence)))dnl
m4_pushdef([b4_end], m4_shift(m4_shift(b4_occurrence)))dnl m4_pushdef([b4_end], m4_shift(m4_shift(b4_occurrence)))dnl
m4_ifndef($3[(]m4_quote(b4_user_name)[)], m4_ifndef($3[(]m4_quote(b4_user_name)[)],
[b4_warn_at([b4_start], [b4_end], [b4_complain_at([b4_start], [b4_end],
[[%s `%s' is not used]], [[%s `%s' is not used]],
[$1], [b4_user_name])])[]dnl [$1], [b4_user_name])])[]dnl
m4_popdef([b4_occurrence])dnl m4_popdef([b4_occurrence])dnl
m4_popdef([b4_user_name])dnl m4_popdef([b4_user_name])dnl
m4_popdef([b4_start])dnl m4_popdef([b4_start])dnl

View File

@@ -4755,7 +4755,9 @@ use this form instead.
@var{qualifier} identifies the purpose of @var{code} and thus the location(s) @var{qualifier} identifies the purpose of @var{code} and thus the location(s)
where Bison should generate it. where Bison should generate it.
Not all values of @var{qualifier} are available for all target languages: Not all @var{qualifier}s are accepted for all target languages.
Unaccepted @var{qualifier}s produce an error.
Some of the accepted @var{qualifier}s are:
@itemize @bullet @itemize @bullet
@item requires @item requires
@@ -4837,9 +4839,6 @@ already defined, so that the debugging facilities are compiled.
@deffnx {Directive} %define @var{variable} @var{value} @deffnx {Directive} %define @var{variable} @var{value}
@deffnx {Directive} %define @var{variable} "@var{value}" @deffnx {Directive} %define @var{variable} "@var{value}"
Define a variable to adjust Bison's behavior. Define a variable to adjust Bison's behavior.
The possible choices for @var{variable}, as well as their meanings, depend on
the selected target language and/or the parser skeleton (@pxref{Decl
Summary,,%language}, @pxref{Decl Summary,,%skeleton}).
It is an error if a @var{variable} is defined by @code{%define} multiple It is an error if a @var{variable} is defined by @code{%define} multiple
times, but see @ref{Bison Options,,-D @var{name}[=@var{value}]}. times, but see @ref{Bison Options,,-D @var{name}[=@var{value}]}.
@@ -4851,7 +4850,7 @@ digit.
Omitting @code{"@var{value}"} entirely is always equivalent to specifying Omitting @code{"@var{value}"} entirely is always equivalent to specifying
@code{""}. @code{""}.
Some @var{variable}s may be used as Booleans. Some @var{variable}s take Boolean values.
In this case, Bison will complain if the variable definition does not meet one In this case, Bison will complain if the variable definition does not meet one
of the following four conditions: of the following four conditions:
@@ -4864,10 +4863,14 @@ This is equivalent to @code{true}.
@item @code{@var{value}} is @code{false}. @item @code{@var{value}} is @code{false}.
@item @var{variable} is never defined. @item @var{variable} is never defined.
In this case, Bison selects a default value, which may depend on the selected In this case, Bison selects a default value.
target language and/or parser skeleton.
@end enumerate @end enumerate
What @var{variable}s are accepted, as well as their meanings and default
values, depend on the selected target language and/or the parser
skeleton (@pxref{Decl Summary,,%language}, @pxref{Decl
Summary,,%skeleton}).
Unaccepted @var{variable}s produce an error.
Some of the accepted @var{variable}s are: Some of the accepted @var{variable}s are:
@itemize @bullet @itemize @bullet

View File

@@ -813,11 +813,11 @@ AT_DATA([input-c.y],
%% %%
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[input-c.y]], [0], [], AT_BISON_CHECK([[input-c.y]], [[1]], [],
[[input-c.y:1.7: warning: %code qualifier `q' is not used [[input-c.y:1.7: %code qualifier `q' is not used
input-c.y:2.7-9: warning: %code qualifier `bad' is not used input-c.y:2.7-9: %code qualifier `bad' is not used
input-c.y:3.7-9: warning: %code qualifier `bad' is not used input-c.y:3.7-9: %code qualifier `bad' is not used
input-c.y:4.7-12: warning: %code qualifier `format' is not used input-c.y:4.7-12: %code qualifier `format' is not used
]]) ]])
AT_DATA([input-c-glr.y], AT_DATA([input-c-glr.y],
@@ -827,10 +827,10 @@ AT_DATA([input-c-glr.y],
%% %%
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[input-c-glr.y]], [0], [], AT_BISON_CHECK([[input-c-glr.y]], [[1]], [],
[[input-c-glr.y:1.7: warning: %code qualifier `q' is not used [[input-c-glr.y:1.7: %code qualifier `q' is not used
input-c-glr.y:2.7-9: warning: %code qualifier `bad' is not used input-c-glr.y:2.7-9: %code qualifier `bad' is not used
input-c-glr.y:3.8-10: warning: %code qualifier `bad' is not used input-c-glr.y:3.8-10: %code qualifier `bad' is not used
]]) ]])
AT_DATA([input-c++.y], AT_DATA([input-c++.y],
@@ -840,10 +840,10 @@ AT_DATA([input-c++.y],
%% %%
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[input-c++.y]], [0], [], AT_BISON_CHECK([[input-c++.y]], [[1]], [],
[[input-c++.y:1.7: warning: %code qualifier `q' is not used [[input-c++.y:1.7: %code qualifier `q' is not used
input-c++.y:2.7-9: warning: %code qualifier `bad' is not used input-c++.y:2.7-9: %code qualifier `bad' is not used
input-c++.y:3.8: warning: %code qualifier `q' is not used input-c++.y:3.8: %code qualifier `q' is not used
]]) ]])
AT_DATA([input-c++-glr.y], AT_DATA([input-c++-glr.y],
@@ -853,10 +853,10 @@ AT_DATA([input-c++-glr.y],
%% %%
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[input-c++-glr.y]], [0], [], AT_BISON_CHECK([[input-c++-glr.y]], [[1]], [],
[[input-c++-glr.y:1.7-9: warning: %code qualifier `bad' is not used [[input-c++-glr.y:1.7-9: %code qualifier `bad' is not used
input-c++-glr.y:2.7: warning: %code qualifier `q' is not used input-c++-glr.y:2.7: %code qualifier `q' is not used
input-c++-glr.y:3.7: warning: %code qualifier `q' is not used input-c++-glr.y:3.7: %code qualifier `q' is not used
]]) ]])
AT_DATA([special-char-@@.y], AT_DATA([special-char-@@.y],
@@ -866,10 +866,10 @@ AT_DATA([special-char-@@.y],
%% %%
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[special-char-@@.y]], [0], [], AT_BISON_CHECK([[special-char-@@.y]], [[1]], [],
[[special-char-@@.y:1.7-9: warning: %code qualifier `bad' is not used [[special-char-@@.y:1.7-9: %code qualifier `bad' is not used
special-char-@@.y:2.7: warning: %code qualifier `q' is not used special-char-@@.y:2.7: %code qualifier `q' is not used
special-char-@@.y:3.7: warning: %code qualifier `q' is not used special-char-@@.y:3.7: %code qualifier `q' is not used
]]) ]])
AT_DATA([special-char-@:>@.y], AT_DATA([special-char-@:>@.y],
@@ -879,10 +879,10 @@ AT_DATA([special-char-@:>@.y],
%% %%
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[special-char-@:>@.y]], [0], [], AT_BISON_CHECK([[special-char-@:>@.y]], [[1]], [],
[[special-char-@:>@.y:1.7-9: warning: %code qualifier `bad' is not used [[special-char-@:>@.y:1.7-9: %code qualifier `bad' is not used
special-char-@:>@.y:2.7: warning: %code qualifier `q' is not used special-char-@:>@.y:2.7: %code qualifier `q' is not used
special-char-@:>@.y:3.7: warning: %code qualifier `q' is not used special-char-@:>@.y:3.7: %code qualifier `q' is not used
]]) ]])
AT_CLEANUP AT_CLEANUP
@@ -917,8 +917,8 @@ AT_DATA([input-unused.y],
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[input-unused.y]], [[0]], [], AT_BISON_CHECK([[input-unused.y]], [[1]], [],
[[input-unused.y:1.9-11: warning: %define variable `var' is not used [[input-unused.y:1.9-11: %define variable `var' is not used
]]) ]])
AT_CLEANUP AT_CLEANUP
@@ -928,9 +928,9 @@ AT_CLEANUP
## %define, --define, --force-define. ## ## %define, --define, --force-define. ##
## ----------------------------------- ## ## ----------------------------------- ##
AT_SETUP([%define, --define, --force-define]) AT_SETUP([[%define, --define, --force-define]])
AT_DATA([skel.c], AT_DATA([[skel.c]],
[[m4@&t@_divert_push(0)@ [[m4@&t@_divert_push(0)@
@output(b4_parser_file_name@)@ @output(b4_parser_file_name@)@
[var-dd: ]b4_percent_define_get([[var-dd]])[ [var-dd: ]b4_percent_define_get([[var-dd]])[
@@ -939,23 +939,16 @@ var-dfg: ]b4_percent_define_get([[var-dfg]])[
var-fd: ]b4_percent_define_get([[var-fd]]) var-fd: ]b4_percent_define_get([[var-fd]])
m4@&t@_divert_pop(0) m4@&t@_divert_pop(0)
]]) ]])
AT_DATA([[input.y]],
AT_DATA([input.y],
[[%define var-dfg "gram" [[%define var-dfg "gram"
%% %%
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[-Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \ AT_BISON_CHECK([[-Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \
-Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \ -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \
-Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \ -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \
-Fvar-fd=cmd-f -Dvar-fd=cmd-d \ -Fvar-fd=cmd-f -Dvar-fd=cmd-d \
-Dunused-d -Funused-f \ --skeleton ./skel.c input.y]])
--skeleton ./skel.c input.y]], [[0]], [],
[[<command line>:10: warning: %define variable `unused-d' is not used
<command line>:11: warning: %define variable `unused-f' is not used
]])
AT_CHECK([[cat input.tab.c]], [[0]], AT_CHECK([[cat input.tab.c]], [[0]],
[[var-dd: cmd-d2 [[var-dd: cmd-d2
var-ff: cmd-f2 var-ff: cmd-f2
@@ -963,17 +956,25 @@ var-dfg: cmd-f
var-fd: cmd-d var-fd: cmd-d
]]) ]])
AT_DATA([input-dg.y], AT_DATA([[input-dg.y]],
[[%define var "gram" [[%define var "gram"
%% %%
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [], AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [],
[[input-dg.y:1.9-11: %define variable `var' redefined [[input-dg.y:1.9-11: %define variable `var' redefined
<command line>:2: previous definition <command line>:2: previous definition
]]) ]])
AT_DATA([[input-unused.y]],
[[%%
start: ;
]])
AT_BISON_CHECK([[-Dunused-d -Funused-f input-unused.y]], [[1]], [],
[[<command line>:2: %define variable `unused-d' is not used
<command line>:3: %define variable `unused-f' is not used
]])
AT_CLEANUP AT_CLEANUP
## --------------------------- ## ## --------------------------- ##
@@ -1065,8 +1066,8 @@ AT_DATA([[input.y]],
%% %%
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[input.y]], [0], [], AT_BISON_CHECK([[input.y]], [[1]], [],
[[input.y:1.9-15: warning: %define variable `foo_bar' is not used [[input.y:1.9-15: %define variable `foo_bar' is not used
]]) ]])
AT_CLEANUP AT_CLEANUP
@@ -1090,8 +1091,8 @@ AT_DATA([[input.y]],
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[input.y]], [0], [], AT_BISON_CHECK([[input.y]], [[1]], [],
[[input.y:1.9-16: warning: %define variable `api.pure' is not used [[input.y:1.9-16: %define variable `api.pure' is not used
]]) ]])
]) ])

View File

@@ -161,8 +161,8 @@ AT_DATA([[input.y]],
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[input.y]], [0], [], AT_BISON_CHECK([[input.y]], [[1]], [],
[[input.y:2.9-21: warning: %define variable `api.push-pull' is not used [[input.y:2.9-21: %define variable `api.push-pull' is not used
]]) ]])
AT_CLEANUP AT_CLEANUP