]> git.saurik.com Git - bison.git/commitdiff
Convert multiple variable definition warnings to complaints.
authorJoel E. Denny <jdenny@ces.clemson.edu>
Sat, 23 May 2009 06:25:28 +0000 (02:25 -0400)
committerJoel E. Denny <jdenny@ces.clemson.edu>
Sat, 23 May 2009 06:27:11 +0000 (02:27 -0400)
* 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.

ChangeLog
NEWS
doc/bison.texinfo
src/muscle_tab.c
src/muscle_tab.h
tests/input.at

index 03c6de134e68d483f83476386a5704a54ec1a6bf..74e2aea5c243080c868e48c9067decc786851d01 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        -F/--force-define and relative %define/-D/--define priorities.
diff --git a/NEWS b/NEWS
index ed8819f0b25a2d83e494facd0b0ea5679bb837da..7d401ad51049e2023459c8e59a583432f9e79b45 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -33,6 +33,8 @@ Bison News
   These features are experimental.  More user feedback will help to
   stabilize them.
 
+** Multiple %define's for any variable is now an error not a warning.
+
 ** %define can now be invoked via the command line.
 
   Each of these command-line options
index d377b5c612edcae08a6200aff4912dd4447f175f..3c63a19a9666f2e1cc5226a92b7af2f10a9e27f5 100644 (file)
@@ -4837,8 +4837,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
 Summary,,%language}, @pxref{Decl Summary,,%skeleton}).
 
-Bison will warn if a @var{variable} is defined by @code{%define}
-multiple times, but @ref{Bison Options,,-D @var{name}[=@var{value}]}.
+It is an error if a @var{variable} is defined by @code{%define} multiple
+times, but @ref{Bison Options,,-D @var{name}[=@var{value}]}.
 
 Omitting @code{"@var{value}"} is always equivalent to specifying it as
 @code{""}.
@@ -7991,16 +7991,19 @@ definitions for the same @var{name} as follows:
 
 @itemize
 @item
-Bison processes all command-line definitions in order and then processes
-all @code{%define} definitions in order.
+Bison quietly ignores all command-line definitions for @var{name} except
+the last.
 @item
-Later definitions override earlier definitions except that Bison quietly
-ignores all @code{%define} definitions if the last command-line
-definition is specified by @code{-F} or @code{--force-define}.
+If that command-line definition is specified by a @code{-D} or
+@code{--define}, Bison reports an error for any @code{%define}
+definition for @var{name}.
 @item
-Bison never warns when a command-line definition overrides another
-definition, but Bison always warns when a @code{%define} definition
-overrides a command-line or @code{%define} definition.
+If that command-line definition is specified by a @code{-F} or
+@code{--force-define} instead, Bison quietly ignores all @code{%define}
+definitions for @var{name}.
+@item
+Otherwise, Bison reports an error if there are multiple @code{%define}
+definitions for @var{name}.
 @end itemize
 
 You should avoid using @code{-F} and @code{--force-define} in your
index fdb03c2997eb7d26800d36ce20f99708bcf9fd4c..cfddbcf31eeb88da0a4816def84f723b497c0900 100644 (file)
@@ -436,9 +436,9 @@ muscle_percent_define_insert (char const *variable, location variable_loc,
           free (variable_tr);
           return;
         }
-      warn_at (variable_loc, _("%s `%s' redefined"),
-               "%define variable", variable);
-      warn_at (muscle_percent_define_get_loc (variable),
+      complain_at (variable_loc, _("%s `%s' redefined"),
+                   "%define variable", variable);
+      complain_at (muscle_percent_define_get_loc (variable),
                    _("previous definition"));
     }
 
index 6edcbbb1a97c9f1564539eb0d2fea155723a3612..e06126b338b92b49f37319ba6965d43959f17dce 100644 (file)
@@ -133,7 +133,7 @@ typedef enum {
 /* Define the muscles for %define variable VARIABLE with VALUE specified
    at VARIABLE_LOC in the manner HOW unless it was specified in the
    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.
    (These rules support the documented behavior as long as command-line
    definitions are processed before grammar file definitions.)  Record
index 911f99841511d1f52a64568e1b1d97cf2f93b4b0..24365e652f5bcefd147a01e20a5751b690fc7657 100644 (file)
@@ -893,7 +893,7 @@ AT_CLEANUP
 
 AT_SETUP([%define errors])
 
-AT_DATA([input.y],
+AT_DATA([input-redefined.y],
 [[%define var "value1"
 %define var "value1"
  %define var "value2"
@@ -903,16 +903,21 @@ AT_DATA([input.y],
 start: ;
 ]])
 
-AT_BISON_CHECK([[input.y]], [0], [],
-[[input.y:2.9-11: warning: %define variable `var' redefined
-input.y:1.9-11: warning: previous definition
-input.y:3.10-12: warning: %define variable `var' redefined
-input.y:2.9-11: warning: 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
-input.y:4.9-16: warning: %define variable `special1' is not used
-input.y:5.9-16: warning: %define variable `special2' is not used
+AT_BISON_CHECK([[input-redefined.y]], [[1]], [],
+[[input-redefined.y:2.9-11: %define variable `var' redefined
+input-redefined.y:1.9-11: previous definition
+input-redefined.y:3.10-12: %define variable `var' redefined
+input-redefined.y:2.9-11: previous definition
+]])
+
+AT_DATA([input-unused.y],
+[[%define var "value"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input-unused.y]], [[0]], [],
+[[input-unused.y:1.9-11: warning: %define variable `var' is not used
 ]])
 
 AT_CLEANUP
@@ -929,40 +934,45 @@ AT_DATA([skel.c],
 @output(b4_parser_file_name@)@
 [var-dd: ]b4_percent_define_get([[var-dd]])[
 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-fd: ]b4_percent_define_get([[var-fd]])
 m4@&t@_divert_pop(0)
 ]])
 
 AT_DATA([input.y],
-[[%define var-dg "gram"
-%define var-dfg "gram"
+[[%define var-dfg "gram"
 %%
 start: ;
 ]])
 
 AT_BISON_CHECK([[-Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \
                  -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \
-                 -Dvar-dg=cmd-d                  \
                  -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \
                  -Fvar-fd=cmd-f -Dvar-fd=cmd-d   \
                  -Dunused-d -Funused-f           \
-                 --skeleton ./skel.c input.y]], [0], [],
-[[input.y:1.9-14: warning: %define variable `var-dg' redefined
-<command line>:6: warning: previous definition
-<command line>:11: warning: %define variable `unused-d' is not used
-<command line>:12: warning: %define variable `unused-f' is not used
+                 --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]],
 [[var-dd: cmd-d2
 var-ff: cmd-f2
-var-dg: gram
 var-dfg: cmd-f
 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
 
 ## --------------------------- ##