* data/c++.m4 (b4_semantic_type_declare): New.
Factors and generalizes what was in glr.cc and lalr1.cc.
* data/variant.hh (b4_semantic_type_declare): Redefine it for
variants.
* data/lalr1.cc, data/glr.cc: Use it.
+2009-03-02 Akim Demaille <demaille@gostai.com>
+
+ b4_semantic_type_declare.
+ * data/c++.m4 (b4_semantic_type_declare): New.
+ Factors and generalizes what was in glr.cc and lalr1.cc.
+ * data/variant.hh (b4_semantic_type_declare): Redefine it for
+ variants.
+ * data/lalr1.cc, data/glr.cc: Use it.
+
2009-02-26 Akim Demaille <demaille@gostai.com>
Upgrade gnulib.
## Semantic Values. ##
## ----------------- ##
+# b4_semantic_type_declare
+# ------------------------
+# Declare semantic_type.
+m4_define([b4_semantic_type_declare],
+[ /// Symbol semantic values.
+m4_ifdef([b4_stype],
+[ union semantic_type
+ {b4_user_stype
+ };],
+[m4_if(b4_tag_seen_flag, 0,
+[[ typedef int semantic_type;]],
+[[ typedef YYSTYPE semantic_type;]])])])
+
+
# b4_variant_if([IF-VARIANT-ARE-USED], [IF-NOT])
# ----------------------------------------------
m4_define([b4_variant_if],
class ]b4_parser_class_name[
{
public:
- /// Symbol semantic values.
#ifndef YYSTYPE
-]m4_ifdef([b4_stype],
-[ union semantic_type
- {
-b4_user_stype
- };],
-[m4_if(b4_tag_seen_flag, 0,
-[[ typedef int semantic_type;]],
-[[ typedef YYSTYPE semantic_type;]])])[
+]b4_semantic_type_declare[
#else
typedef YYSTYPE semantic_type;
#endif
{
public:
#ifndef YYSTYPE
-]b4_variant_if(
-[ /// An auxiliary type to compute the largest semantic type.
- union union_type
- {]b4_type_foreach([b4_char_sizeof])[};
-
- /// Symbol semantic values.
- typedef variant<sizeof(union_type)> semantic_type;],
-[ /// Symbol semantic values.
-m4_ifdef([b4_stype],
-[ union semantic_type
- {b4_user_stype
- };],
-[m4_if(b4_tag_seen_flag, 0,
-[[ typedef int semantic_type;]],
-[[ typedef YYSTYPE semantic_type;]])])])[
+]b4_semantic_type_declare[
#else
typedef YYSTYPE semantic_type;
#endif]b4_locations_if([
## -------------------------- ##
+# b4_semantic_type_declare
+# ------------------------
+# Declare semantic_type.
+m4_define([b4_semantic_type_declare],
+[ /// An auxiliary type to compute the largest semantic type.
+ union union_type
+ {]b4_type_foreach([b4_char_sizeof])[};
+
+ /// Symbol semantic values.
+ typedef variant<sizeof(union_type)> semantic_type;])
+
+
# How the semantic value is extracted when using variants.
# b4_symbol_value(VAL, [TYPE])