* 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
+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).
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).
#
#
# 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)
# -----------------------------------
# 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]])
#include <string>
#include <iostream>
#include <string>
#include <iostream>
+]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[
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
{
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()
#include <string>
#include <iostream>
#include <string>
#include <iostream>
+]b4_percent_define_ifdef([[location_type]], [],
+ [[#include "location.hh"]])[
/* Enabling traces. */
#ifndef YYDEBUG
/* Enabling traces. */
#ifndef YYDEBUG
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
{