diff options
author | Akim Demaille <demaille@gostai.com> | 2010-05-09 14:29:35 +0200 |
---|---|---|
committer | Akim Demaille <demaille@gostai.com> | 2010-05-09 14:32:19 +0200 |
commit | 95a2de5695670ae0df98cb3c42141cad549f0204 (patch) | |
tree | 6f6f85b372cfa8733eb3e026a338a31a3489a91a /data | |
parent | 38f9fd6439a8f5e7aa4557c78426333e42fd25ce (diff) | |
download | bison-95a2de5695670ae0df98cb3c42141cad549f0204.tar.gz |
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.
(cherry picked from commit 7789b6e3e7199a00437f03591a4605e6c042bdea)
Conflicts:
ChangeLog
data/bison.m4
data/c++.m4
data/lalr1.cc
Diffstat (limited to 'data')
-rw-r--r-- | data/bison.m4 | 29 | ||||
-rw-r--r-- | data/c++.m4 | 7 | ||||
-rw-r--r-- | data/glr.cc | 6 | ||||
-rw-r--r-- | data/lalr1.cc | 13 |
4 files changed, 42 insertions, 13 deletions
diff --git a/data/bison.m4 b/data/bison.m4 index 868f98a1..d894606f 100644 --- a/data/bison.m4 +++ b/data/bison.m4 @@ -361,10 +361,26 @@ m4_popdef([b4_start])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). # @@ -372,8 +388,11 @@ m4_popdef([b4_end])dnl # # 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) # ----------------------------------- diff --git a/data/c++.m4 b/data/c++.m4 index 7b58c90c..2810626a 100644 --- a/data/c++.m4 +++ b/data/c++.m4 @@ -25,7 +25,12 @@ m4_include(b4_pkgdatadir/[c.m4]) # 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]]) diff --git a/data/glr.cc b/data/glr.cc index 068f9a31..fb9a87b6 100644 --- a/data/glr.cc +++ b/data/glr.cc @@ -229,7 +229,8 @@ b4_copyright([Skeleton interface for Bison GLR parsers in C++], #include <string> #include <iostream> -#include "location.hh" +]b4_percent_define_ifdef([[location_type]], [], + [[#include "location.hh"]])[ /* Using locations. */ #define YYLSP_NEEDED ]b4_locations_flag[ @@ -277,7 +278,8 @@ b4_user_stype 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 { diff --git a/data/lalr1.cc b/data/lalr1.cc index cd54b6c3..4009b7c8 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -24,9 +24,10 @@ m4_define([b4_parser_class_name], 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() @@ -46,8 +47,9 @@ dnl FIXME: This is wrong, we want computed header guards. #include <string> #include <iostream> -#include "location.hh" #include "stack.hh" +]b4_percent_define_ifdef([[location_type]], [], + [[#include "location.hh"]])[ /* Enabling traces. */ #ifndef YYDEBUG @@ -106,7 +108,8 @@ b4_user_stype 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 { |