Convert multiple variable definition warnings to complaints.

* NEWS (2.5): Add a new entry for that change.
* doc/bison.texinfo (Decl Summary): Update %define entry.
(Bison Options): Update -D/--define/-F/--force-define entry.
* src/muscle-tab.c (muscle_percent_define_insert): Implement.
* src/muscle-tab.h (muscle_percent_define_insert): Update
comments.
* tests/input.at (`%define errors'): Update.
(`%define, --define, --force-define'): Update.
(cherry picked from commit e3a33f7c23)
This commit is contained in:
Joel E. Denny
2009-05-23 02:25:28 -04:00
parent de5ab9400a
commit 0b6d43c52f
6 changed files with 62 additions and 35 deletions

View File

@@ -1,3 +1,15 @@
2009-05-22 Joel E. Denny <jdenny@ces.clemson.edu>
Convert multiple variable definition warnings to complaints.
* NEWS (2.5): Add a new entry for that change.
* doc/bison.texinfo (Decl Summary): Update %define entry.
(Bison Options): Update -D/--define/-F/--force-define entry.
* src/muscle-tab.c (muscle_percent_define_insert): Implement.
* src/muscle-tab.h (muscle_percent_define_insert): Update
comments.
* tests/input.at (`%define errors'): Update.
(`%define, --define, --force-define'): Update.
2009-05-22 Joel E. Denny <jdenny@ces.clemson.edu> 2009-05-22 Joel E. Denny <jdenny@ces.clemson.edu>
-F/--force-define and relative %define/-D/--define priorities. -F/--force-define and relative %define/-D/--define priorities.

2
NEWS
View File

@@ -57,6 +57,8 @@ 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.
** Multiple %define's for any variable is now an error not a warning.
** %define can now be invoked via the command line. ** %define can now be invoked via the command line.
Each of these command-line options Each of these command-line options

View File

@@ -4845,8 +4845,8 @@ The possible choices for @var{variable}, as well as their meanings, depend on
the selected target language and/or the parser skeleton (@pxref{Decl the selected target language and/or the parser skeleton (@pxref{Decl
Summary,,%language}, @pxref{Decl Summary,,%skeleton}). Summary,,%language}, @pxref{Decl Summary,,%skeleton}).
Bison will warn if a @var{variable} is defined by @code{%define} It is an error if a @var{variable} is defined by @code{%define} multiple
multiple times, but @ref{Bison Options,,-D @var{name}[=@var{value}]}. times, but @ref{Bison Options,,-D @var{name}[=@var{value}]}.
Omitting @code{"@var{value}"} is always equivalent to specifying it as Omitting @code{"@var{value}"} is always equivalent to specifying it as
@code{""}. @code{""}.
@@ -8149,16 +8149,19 @@ definitions for the same @var{name} as follows:
@itemize @itemize
@item @item
Bison processes all command-line definitions in order and then processes Bison quietly ignores all command-line definitions for @var{name} except
all @code{%define} definitions in order. the last.
@item @item
Later definitions override earlier definitions except that Bison quietly If that command-line definition is specified by a @code{-D} or
ignores all @code{%define} definitions if the last command-line @code{--define}, Bison reports an error for any @code{%define}
definition is specified by @code{-F} or @code{--force-define}. definition for @var{name}.
@item @item
Bison never warns when a command-line definition overrides another If that command-line definition is specified by a @code{-F} or
definition, but Bison always warns when a @code{%define} definition @code{--force-define} instead, Bison quietly ignores all @code{%define}
overrides a command-line or @code{%define} definition. definitions for @var{name}.
@item
Otherwise, Bison reports an error if there are multiple @code{%define}
definitions for @var{name}.
@end itemize @end itemize
You should avoid using @code{-F} and @code{--force-define} in your You should avoid using @code{-F} and @code{--force-define} in your

View File

@@ -436,9 +436,9 @@ muscle_percent_define_insert (char const *variable, location variable_loc,
free (variable_tr); free (variable_tr);
return; return;
} }
warn_at (variable_loc, _("%s `%s' redefined"), complain_at (variable_loc, _("%s `%s' redefined"),
"%define variable", variable); "%define variable", variable);
warn_at (muscle_percent_define_get_loc (variable), complain_at (muscle_percent_define_get_loc (variable),
_("previous definition")); _("previous definition"));
} }

View File

@@ -136,7 +136,7 @@ typedef enum {
/* Define the muscles for %define variable VARIABLE with VALUE specified /* Define the muscles for %define variable VARIABLE with VALUE specified
at VARIABLE_LOC in the manner HOW unless it was specified in the at VARIABLE_LOC in the manner HOW unless it was specified in the
grammar file while the previous definition for VARIABLE was specified grammar file while the previous definition for VARIABLE was specified
with -F/--force-define. Warn if a previous definition is being with -F/--force-define. Complain if a previous definition is being
overridden and the new definition is specified in the grammar file. overridden and the new definition is specified in the grammar file.
(These rules support the documented behavior as long as command-line (These rules support the documented behavior as long as command-line
definitions are processed before grammar file definitions.) Record definitions are processed before grammar file definitions.) Record

View File

@@ -888,7 +888,7 @@ AT_CLEANUP
AT_SETUP([%define errors]) AT_SETUP([%define errors])
AT_DATA([input.y], AT_DATA([input-redefined.y],
[[%define var "value1" [[%define var "value1"
%define var "value1" %define var "value1"
%define var "value2" %define var "value2"
@@ -898,16 +898,21 @@ AT_DATA([input.y],
start: ; start: ;
]]) ]])
AT_BISON_CHECK([[input.y]], [0], [], AT_BISON_CHECK([[input-redefined.y]], [[1]], [],
[[input.y:2.9-11: warning: %define variable `var' redefined [[input-redefined.y:2.9-11: %define variable `var' redefined
input.y:1.9-11: warning: previous definition input-redefined.y:1.9-11: previous definition
input.y:3.10-12: warning: %define variable `var' redefined input-redefined.y:3.10-12: %define variable `var' redefined
input.y:2.9-11: warning: previous definition input-redefined.y:2.9-11: previous definition
input.y:1.9-11: warning: %define variable `var' is not used ]])
input.y:2.9-11: warning: %define variable `var' is not used
input.y:3.10-12: warning: %define variable `var' is not used AT_DATA([input-unused.y],
input.y:4.9-16: warning: %define variable `special1' is not used [[%define var "value"
input.y:5.9-16: warning: %define variable `special2' is not used %%
start: ;
]])
AT_BISON_CHECK([[input-unused.y]], [[0]], [],
[[input-unused.y:1.9-11: warning: %define variable `var' is not used
]]) ]])
AT_CLEANUP AT_CLEANUP
@@ -924,40 +929,45 @@ AT_DATA([skel.c],
@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]])[
var-ff: ]b4_percent_define_get([[var-ff]])[ var-ff: ]b4_percent_define_get([[var-ff]])[
var-dg: ]b4_percent_define_get([[var-dg]])[
var-dfg: ]b4_percent_define_get([[var-dfg]])[ 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-dg "gram" [[%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-dg=cmd-d \
-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 \ -Dunused-d -Funused-f \
--skeleton ./skel.c input.y]], [0], [], --skeleton ./skel.c input.y]], [[0]], [],
[[input.y:1.9-14: warning: %define variable `var-dg' redefined [[<command line>:10: warning: %define variable `unused-d' is not used
<command line>:6: warning: previous definition <command line>:11: warning: %define variable `unused-f' is not used
<command line>:11: warning: %define variable `unused-d' is not used
<command line>:12: 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
var-dg: gram
var-dfg: cmd-f var-dfg: cmd-f
var-fd: cmd-d var-fd: cmd-d
]]) ]])
AT_DATA([input-dg.y],
[[%define var "gram"
%%
start: ;
]])
AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [],
[[input-dg.y:1.9-11: %define variable `var' redefined
<command line>:2: previous definition
]])
AT_CLEANUP AT_CLEANUP
## --------------------------- ## ## --------------------------- ##