bison-patches
[Top][All Lists]
Advanced

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

[PATCH] muscle: factor the handling of obsolete of obsolete directives.


From: Akim Demaille
Subject: [PATCH] muscle: factor the handling of obsolete of obsolete directives.
Date: Sun, 5 Apr 2009 21:48:45 +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        |   14 ++++++++++++++
 src/muscle_tab.c |   26 ++++++++++++++++++++++++--
 src/muscle_tab.h |   11 ++++++++++-
 src/parse-gram.y |   17 +----------------
 src/scan-gram.l  |    2 +-
 5 files changed, 50 insertions(+), 20 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 141039d..483f6ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2009-04-06  Akim Demaille  <address@hidden>
+
+       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  <address@hidden>
 
        Fix options documentation.
diff --git a/src/muscle_tab.c b/src/muscle_tab.c
index 0265e45..3728ade 100644
--- a/src/muscle_tab.c
+++ b/src/muscle_tab.c
@@ -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)
 {
diff --git a/src/muscle_tab.h b/src/muscle_tab.h
index 941c67e..3fe64e5 100644
--- a/src/muscle_tab.h
+++ b/src/muscle_tab.h
@@ -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
diff --git a/src/parse-gram.y b/src/parse-gram.y
index c7238de..7277105 100644
--- a/src/parse-gram.y
+++ b/src/parse-gram.y
@@ -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
     {
diff --git a/src/scan-gram.l b/src/scan-gram.l
index 2cfbb4e..8b5027c 100644
--- a/src/scan-gram.l
+++ b/src/scan-gram.l
@@ -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;
-- 
1.6.2.1





reply via email to

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