]> git.saurik.com Git - bison.git/commitdiff
muscle: factor the handling of obsolete of obsolete directives.
authorAkim Demaille <demaille@gostai.com>
Sun, 5 Apr 2009 19:48:45 +0000 (21:48 +0200)
committerAkim Demaille <demaille@gostai.com>
Mon, 6 Apr 2009 11:24:32 +0000 (13:24 +0200)
Suggested by Joel E. Denny.

* src/muscle_tab.h, src/muscle_tab.c (muscle_percent_define_ensure):
New, extracted from...
* src/parse-gram.y (prologue_declaration: pure-parser): here.
Remove it.
(prologue_declaration: "%<flag>"): Use
muscle_percent_define_ensure.
(%error-verbose, %pure-parser): No longer tokens.
* src/scan-gram.l (pure-parser): Return as a %<flag>.

ChangeLog
src/muscle_tab.c
src/muscle_tab.h
src/parse-gram.y
src/scan-gram.l

index 141039d8d61c37eea68f0ee83b24c494c2746e28..483f6ad6ac2221c49a5b33b01b465310e001973f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2009-04-06  Akim Demaille  <demaille@gostai.com>
+
+       muscle: factor the handling of obsolete of obsolete directives.
+       Suggested by Joel E. Denny.
+       
+       * src/muscle_tab.h, src/muscle_tab.c (muscle_percent_define_ensure):
+       New, extracted from...
+       * src/parse-gram.y (prologue_declaration: pure-parser): here.
+       Remove it.
+       (prologue_declaration: "%<flag>"): Use
+       muscle_percent_define_ensure.
+       (%error-verbose, %pure-parser): No longer tokens.
+       * src/scan-gram.l (pure-parser): Return as a %<flag>.
+
 2009-04-06  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        Fix options documentation.
index 0265e45a7b69f3469b00eb46a745c1518cee3ba4..3728ade6d8d97e1890ba4d9bcf8aa2a2ff2f4254 100644 (file)
@@ -1,7 +1,7 @@
 /* Muscle table manager for Bison.
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
-   Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -429,6 +429,28 @@ muscle_percent_define_insert (char const *variable, location variable_loc,
                               variable_loc);
 }
 
+/* This is used for backward compatibility, e.g., "%define api.pure"
+   supersedes "%pure-parser".  */
+void
+muscle_percent_define_ensure (char const *variable, location loc,
+                              bool value)
+{
+  char const *val = value ? "" : "false";
+  char const *name;
+  MUSCLE_USER_NAME_CONVERT (name, "percent_define(", variable, ")");
+
+  /* %pure-parser is deprecated in favor of `%define api.pure', so use
+     `%define api.pure' in a backward-compatible manner here.  First,
+     don't complain if %pure-parser is specified multiple times.  */
+  if (!muscle_find_const (name))
+    muscle_percent_define_insert (variable, loc, val);
+  /* In all cases, use api.pure now so that the backend doesn't complain if
+     the skeleton ignores api.pure, but do warn now if there's a previous
+     conflicting definition from an actual %define.  */
+  if (muscle_percent_define_flag_if (variable) != value)
+    muscle_percent_define_insert (variable, loc, val);
+}
+
 char *
 muscle_percent_define_get (char const *variable)
 {
index 941c67e3cad52f70805429504c8796f2e406b2e8..3fe64e5aeb74ab61c5574aed025db5caa5d09311 100644 (file)
@@ -1,5 +1,7 @@
 /* Muscle table manager for Bison,
-   Copyright (C) 2001, 2002, 2003, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+   Copyright (C) 2001, 2002, 2003, 2006, 2007, 2008, 2009
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -131,6 +133,13 @@ void muscle_user_name_list_grow (char const *key, char const *user_name,
 void muscle_percent_define_insert (char const *variable, location variable_loc,
                                    char const *value);
 
+/* Make sure that VARIABLE is set to the boolean VALUE.  Warn on mismatches
+   only, but accept repeated declaration.  Used for backward compatibility
+   between old directives such as %pure-parser, and the recommended use of
+   variables (%define api.pure).   */
+void muscle_percent_define_ensure (char const *variable, location variable_loc,
+                                   bool value);
+
 /* Mimic b4_percent_define_get in ../data/bison.m4 exactly.  That is, if the
    %define variable VARIABLE is defined, return its value.  Otherwise, return
    the empty string.  Also, record Bison's usage of VARIABLE by defining
index c7238dea95eac74f5c5ee75a1803d713f337b0e6..7277105658e95f8152e22701e5c166164515091d 100644 (file)
@@ -131,7 +131,6 @@ static int current_prec = 0;
   PERCENT_DEFAULT_PREC    "%default-prec"
   PERCENT_DEFINE          "%define"
   PERCENT_DEFINES         "%defines"
-  PERCENT_ERROR_VERBOSE   "%error-verbose"
   PERCENT_EXPECT          "%expect"
   PERCENT_EXPECT_RR      "%expect-rr"
   PERCENT_FLAG            "%<flag>"
@@ -148,7 +147,6 @@ static int current_prec = 0;
                          "%nondeterministic-parser"
   PERCENT_OUTPUT          "%output"
   PERCENT_PARSE_PARAM     "%parse-param"
-  PERCENT_PURE_PARSER     "%pure-parser"
   PERCENT_REQUIRE        "%require"
   PERCENT_SKELETON        "%skeleton"
   PERCENT_START           "%start"
@@ -228,7 +226,7 @@ prologue_declaration:
     }
 | "%<flag>"
     {
-      muscle_percent_define_insert ($1, @1, "");
+      muscle_percent_define_ensure ($1, @1, true);
     }
 | "%define" variable content.opt
     {
@@ -268,19 +266,6 @@ prologue_declaration:
 | "%output" STRING              { spec_outfile = $2; }
 | "%output" "=" STRING          { spec_outfile = $3; }  /* deprecated */
 | "%parse-param" "{...}"       { add_param ("parse_param", $2, @2); }
-| "%pure-parser"
-    {
-      /* %pure-parser is deprecated in favor of `%define api.pure', so use
-         `%define api.pure' in a backward-compatible manner here.  First, don't
-         complain if %pure-parser is specified multiple times.  */
-      if (!muscle_find_const ("percent_define(api.pure)"))
-        muscle_percent_define_insert ("api.pure", @1, "");
-      /* In all cases, use api.pure now so that the backend doesn't complain if
-         the skeleton ignores api.pure, but do warn now if there's a previous
-         conflicting definition from an actual %define.  */
-      if (!muscle_percent_define_flag_if ("api.pure"))
-        muscle_percent_define_insert ("api.pure", @1, "");
-    }
 | "%require" STRING             { version_check (&@2, $2); }
 | "%skeleton" STRING
     {
index 2cfbb4e4c1b96bb3fd6fd71d3082e436a7b70f2a..8b5027c9d1826847c54c978d5a83be32ae6041b7 100644 (file)
@@ -204,7 +204,7 @@ splice       (\\[ \f\t\v]*\n)*
   "%prec"                           return PERCENT_PREC;
   "%precedence"                     return PERCENT_PRECEDENCE;
   "%printer"                        return PERCENT_PRINTER;
-  "%pure"[-_]"parser"               return PERCENT_PURE_PARSER;
+  "%pure"[-_]"parser"               RETURN_PERCENT_FLAG("api.pure");
   "%require"                        return PERCENT_REQUIRE;
   "%right"                          return PERCENT_RIGHT;
   "%skeleton"                       return PERCENT_SKELETON;