mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
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:
14
ChangeLog
14
ChangeLog
@@ -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
4
NEWS
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
]])
|
]])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user