]> git.saurik.com Git - bison.git/commitdiff
lalr1.cc: don't generate location.hh when location_type is defined
authorAkim Demaille <demaille@gostai.com>
Sun, 9 May 2010 12:29:35 +0000 (14:29 +0200)
committerAkim Demaille <demaille@gostai.com>
Sun, 9 May 2010 12:32:19 +0000 (14:32 +0200)
* data/bison.m4 (b4_percent_define_use): New.
(b4_percent_define_get): Use it.
Accept a default value.
* data/c++.m4: Do not provide a default value for the %define
variable location_type, rather, use b4_percent_define_get with a
default argument where its value is needed.
* data/lalr1.cc: Do not load location.cc (which outputs both
location.hh and position.hh) if the user defined location_type.
Do not include location.hh either.
* data/glr.cc: Likewise.

(cherry picked from commit 7789b6e3e7199a00437f03591a4605e6c042bdea)

Conflicts:

ChangeLog
data/bison.m4
data/c++.m4
data/lalr1.cc

ChangeLog
data/bison.m4
data/c++.m4
data/glr.cc
data/lalr1.cc

index c59e809b9e871c78298098f6b4c572a525a6709b..aa2efc014fa9e11da9fe3ed57c96879ca421bb71 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2010-05-04  Akim Demaille  <demaille@gostai.com>
+
+       lalr1.cc: don't generate location.hh when location_type is defined
+       * data/bison.m4 (b4_percent_define_use): New.
+       (b4_percent_define_get): Use it.
+       Accept a default value.
+       * data/c++.m4: Do not provide a default value for the %define
+       variable location_type, rather, use b4_percent_define_get with a
+       default argument where its value is needed.
+       * data/lalr1.cc: Do not load location.cc (which outputs both
+       location.hh and position.hh) if the user defined location_type.
+       Do not include location.hh either.
+       * data/glr.cc: Likewise.
+
 2010-05-04  Akim Demaille  <demaille@gostai.com>
 
        lalr1.cc: location_type: make sure we don't depend on loc.(begin|end).
 2010-05-04  Akim Demaille  <demaille@gostai.com>
 
        lalr1.cc: location_type: make sure we don't depend on loc.(begin|end).
index 868f98a14ad3dc8c7303cd491ca06f0a068de67d..d894606fb776c39a9a7958df234f6f9933b5b152 100644 (file)
@@ -361,10 +361,26 @@ m4_popdef([b4_start])dnl
 m4_popdef([b4_end])dnl
 ])])
 
 m4_popdef([b4_end])dnl
 ])])
 
-# b4_percent_define_get(VARIABLE)
+
+
+
+## --------------------- ##
+## b4_percent_define_*.  ##
+## --------------------- ##
+
+
+# b4_percent_define_use(VARIABLE)
 # -------------------------------
 # -------------------------------
-# Mimic muscle_percent_define_get in ../src/muscle-tab.h exactly.  That is, if
-# the %define variable VARIABLE is defined, emit its value.  Also, record
+# Declare that VARIABLE was used.
+m4_define([b4_percent_define_use],
+[m4_define([b4_percent_define_bison_variables(]$1[)])dnl
+])
+
+# b4_percent_define_get(VARIABLE, [DEFAULT])
+# ------------------------------------------
+# Mimic muscle_percent_define_get in ../src/muscle-tab.h.  That is, if
+# the %define variable VARIABLE is defined, emit its value.  Contrary
+# to its C counterpart, return DEFAULT otherwise.  Also, record
 # Bison's usage of VARIABLE by defining
 # b4_percent_define_bison_variables(VARIABLE).
 #
 # Bison's usage of VARIABLE by defining
 # b4_percent_define_bison_variables(VARIABLE).
 #
@@ -372,8 +388,11 @@ m4_popdef([b4_end])dnl
 #
 #   b4_percent_define_get([[foo]])
 m4_define([b4_percent_define_get],
 #
 #   b4_percent_define_get([[foo]])
 m4_define([b4_percent_define_get],
-[m4_define([b4_percent_define_bison_variables(]$1[)])dnl
-m4_ifdef([b4_percent_define(]$1[)], [m4_indir([b4_percent_define(]$1[)])])])
+[b4_percent_define_use([$1])dnl
+m4_ifdef([b4_percent_define(]$1[)],
+         [m4_indir([b4_percent_define(]$1[)])],
+         [$2])])
+
 
 # b4_percent_define_get_loc(VARIABLE)
 # -----------------------------------
 
 # b4_percent_define_get_loc(VARIABLE)
 # -----------------------------------
index 7b58c90cb307b083d2dac4f7a4b1fff4a22281b8..2810626a2db87810abca2dc91da34581a4bfa4d7 100644 (file)
@@ -25,7 +25,12 @@ m4_include(b4_pkgdatadir/[c.m4])
 
 # Default parser class name.
 b4_percent_define_default([[parser_class_name]], [[parser]])
 
 # Default parser class name.
 b4_percent_define_default([[parser_class_name]], [[parser]])
-b4_percent_define_default([[location_type]], [[location]])
+
+# Don't do that so that we remember whether we're using a user
+# request, or the default value.
+#
+# b4_percent_define_default([[location_type]], [[location]])
+
 b4_percent_define_default([[filename_type]], [[std::string]])
 b4_percent_define_default([[namespace]], m4_defn([b4_prefix]))
 b4_percent_define_default([[global_tokens_and_yystype]], [[false]])
 b4_percent_define_default([[filename_type]], [[std::string]])
 b4_percent_define_default([[namespace]], m4_defn([b4_prefix]))
 b4_percent_define_default([[global_tokens_and_yystype]], [[false]])
index 068f9a314053f12126fb7884677302c10d3b9800..fb9a87b662b04bf3b82edaf8a18a279b23d8252c 100644 (file)
@@ -229,7 +229,8 @@ b4_copyright([Skeleton interface for Bison GLR parsers in C++],
 
 #include <string>
 #include <iostream>
 
 #include <string>
 #include <iostream>
-#include "location.hh"
+]b4_percent_define_ifdef([[location_type]], [],
+                         [[#include "location.hh"]])[
 
 /* Using locations.  */
 #define YYLSP_NEEDED ]b4_locations_flag[
 
 /* Using locations.  */
 #define YYLSP_NEEDED ]b4_locations_flag[
@@ -277,7 +278,8 @@ b4_user_stype
     typedef YYSTYPE semantic_type;
 #endif
     /// Symbol locations.
     typedef YYSTYPE semantic_type;
 #endif
     /// Symbol locations.
-    typedef ]b4_percent_define_get([[location_type]])[ location_type;
+    typedef ]b4_percent_define_get([[location_type]],
+                                   [[location]])[ location_type;
     /// Tokens.
     struct token
     {
     /// Tokens.
     struct token
     {
index cd54b6c3e61c8335fe9ed0e4cb698b2b55876ba3..4009b7c87fae84454831617d18e80d0ef1c0e2c2 100644 (file)
@@ -24,9 +24,10 @@ m4_define([b4_parser_class_name],
 b4_defines_if([],
               [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
 
 b4_defines_if([],
               [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
 
-# Backward compatibility.
-m4_define([b4_location_constructors])
-m4_include(b4_pkgdatadir/[location.cc])
+b4_percent_define_ifdef([[location_type]], [],
+  [# Backward compatibility.
+  m4_define([b4_location_constructors])
+  m4_include(b4_pkgdatadir/[location.cc])])
 
 # We do want M4 expansion after # for CPP macros.
 m4_changecom()
 
 # We do want M4 expansion after # for CPP macros.
 m4_changecom()
@@ -46,8 +47,9 @@ dnl FIXME: This is wrong, we want computed header guards.
 
 #include <string>
 #include <iostream>
 
 #include <string>
 #include <iostream>
-#include "location.hh"
 #include "stack.hh"
 #include "stack.hh"
+]b4_percent_define_ifdef([[location_type]], [],
+                         [[#include "location.hh"]])[
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -106,7 +108,8 @@ b4_user_stype
     typedef YYSTYPE semantic_type;
 #endif
     /// Symbol locations.
     typedef YYSTYPE semantic_type;
 #endif
     /// Symbol locations.
-    typedef ]b4_percent_define_get([[location_type]])[ location_type;
+    typedef ]b4_percent_define_get([[location_type]],
+                                   [[location]])[ location_type;
     /// Tokens.
     struct token
     {
     /// Tokens.
     struct token
     {