bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] -F/--force-define and relative %define/-D/--define prioritie


From: Joel E. Denny
Subject: Re: [PATCH] -F/--force-define and relative %define/-D/--define priorities.
Date: Sat, 23 May 2009 02:51:46 -0400 (EDT)

On Sat, 23 May 2009, Joel E. Denny wrote:

> +  if (how == MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE
> +      && muscle_find_const (name))
>      {
> +      muscle_percent_define_how how_old =
> +        atoi (muscle_find_const (how_name));
> +      if (how_old == MUSCLE_PERCENT_DEFINE_F)
> +        {
> +          free (variable_tr);
> +          return;
> +        }
>        warn_at (variable_loc, _("%s `%s' redefined"),
>                 "%define variable", variable);
>        warn_at (muscle_percent_define_get_loc (variable),
> -               _("previous definition"));
> +                   _("previous definition"));
>      }

I meant to convert these to complaints.  I pushed the following patch to 
branch-2.5 and master.

>From e3a33f7c23fc9febd1bbff33045c8b455a1972a8 Mon Sep 17 00:00:00 2001
From: Joel E. Denny <address@hidden>
Date: Sat, 23 May 2009 02:25:28 -0400
Subject: [PATCH] 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.

diff --git a/NEWS b/NEWS
index ed8819f..7d401ad 100644
--- 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
diff --git a/doc/bison.texinfo b/doc/bison.texinfo
index d377b5c..3c63a19 100644
--- a/doc/bison.texinfo
+++ b/doc/bison.texinfo
@@ -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 @address@hidden
+It is an error if a @var{variable} is defined by @code{%define} multiple
+times, but @ref{Bison Options,,-D @address@hidden
 
 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
address@hidden, 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
address@hidden instead, Bison quietly ignores all @code{%define}
+definitions for @var{name}.
address@hidden
+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
diff --git a/src/muscle_tab.c b/src/muscle_tab.c
index fdb03c2..cfddbcf 100644
--- a/src/muscle_tab.c
+++ b/src/muscle_tab.c
@@ -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"));
     }
 
diff --git a/src/muscle_tab.h b/src/muscle_tab.h
index 6edcbbb..e06126b 100644
--- a/src/muscle_tab.h
+++ b/src/muscle_tab.h
@@ -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
diff --git a/tests/input.at b/tests/input.at
index 911f998..24365e6 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -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@&address@hidden(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
 
 ## --------------------------- ##
-- 
1.5.4.3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]