]> git.saurik.com Git - bison.git/commitdiff
lalr1.cc: don't generate location.hh when location_type is defined
authorAkim Demaille <demaille@gostai.com>
Wed, 14 Apr 2010 15:56:38 +0000 (17:56 +0200)
committerAkim Demaille <demaille@gostai.com>
Tue, 4 May 2010 09:34:03 +0000 (11:34 +0200)
* data/bison.m4 (b4_percent_define_get): 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.

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

index 4b9bb5eef70975e39950067f3dac5bd8caa8f7d8..216c2e8aa2db69f842d47c92ebf90c9e740c887c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+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_get): 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.
+
 2010-05-04  Akim Demaille  <demaille@gostai.com>
 
        lalr1.cc: minor refactoring.
index 5a5df0f3fb8584f85d18320df25db30c7c52b9ae..079a5e568238f75e087d527be0e4cf47f2ed102e 100644 (file)
@@ -563,10 +563,11 @@ m4_define([b4_percent_define_use],
 [m4_define([b4_percent_define_bison_variables(]$1[)])dnl
 ])
 
-# b4_percent_define_get(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
+# 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).
 #
@@ -575,7 +576,9 @@ m4_define([b4_percent_define_use],
 #   b4_percent_define_get([[foo]])
 m4_define([b4_percent_define_get],
 [b4_percent_define_use([$1])dnl
-m4_ifdef([b4_percent_define(]$1[)], [m4_indir([b4_percent_define(]$1[)])])])
+m4_ifdef([b4_percent_define(]$1[)],
+         [m4_indir([b4_percent_define(]$1[)])],
+         [$2])])
 
 # b4_percent_define_get_loc(VARIABLE)
 # -----------------------------------
index 80c74511071103f386f0e6b6aa37296101469d03..6033e174a065cdae23d65ee14fbc36436f7cb703 100644 (file)
@@ -24,7 +24,12 @@ m4_include(b4_pkgdatadir/[c.m4])
 ## ---------------- ##
 
 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_type]])
+
 b4_percent_define_default([[filename_type]], [[std::string]])
 b4_percent_define_default([[api.namespace]], m4_defn([b4_prefix]))
 
@@ -123,7 +128,8 @@ m4_define([b4_public_types_declare],
     typedef YYSTYPE semantic_type;
 #endif]b4_locations_if([
     /// Symbol locations.
-    typedef b4_percent_define_get([[location_type]]) location_type;])[
+    typedef b4_percent_define_get([[location_type]],
+                                  [[location]]) location_type;])[
 
     /// Syntax errors thrown from user actions.
     struct syntax_error : std::runtime_error
index b0b075ca74313bb635800d7a0bc237c791fe2363..7cb7db628ac64336994836b110981f93f575f746 100644 (file)
@@ -124,10 +124,10 @@ m4_define([b4_parser_class_name],
 b4_defines_if([],
               [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
 
-b4_locations_if(
-[# Backward compatibility.
-m4_define([b4_location_constructors])
-m4_include(b4_pkgdatadir/[location.cc])])
+b4_locations_if([b4_percent_define_ifdef([[location_type]], [],
+  [# Backward compatibility.
+  m4_define([b4_location_constructors])
+  m4_include(b4_pkgdatadir/[location.cc])])])
 m4_include(b4_pkgdatadir/[stack.hh])
 b4_variant_if([m4_include(b4_pkgdatadir/[variant.hh])])
 
@@ -149,8 +149,9 @@ dnl FIXME: This is wrong, we want computed header guards.
 #include <stdexcept>
 #include <string>
 #include <iostream>
-]b4_locations_if([#include "location.hh"])[
 #include "stack.hh"
+]b4_locations_if([b4_percent_define_ifdef([[location_type]], [],
+                                          [[#include "location.hh"]])])[
 
 ]b4_variant_if([b4_namespace_open
 b4_variant_define