The union used to compute the size of the variant used to iterate over the
type of all the symbols, with a lot of redundancy. Now iterate over the
lists of symbols having the same type-name.
* data/lalr1.cc (b4_char_sizeof_): New.
(b4_char_sizeof): Use it.
Adjust to be called with a list of numbers instead of a single
number.
Adjust its caller for new-line issues.
+2008-11-13 Akim Demaille <demaille@gostai.com>
+
+ Use b4_type_names for the union type.
+ The union used to compute the size of the variant used to iterate over the
+ type of all the symbols, with a lot of redundancy. Now iterate over the
+ lists of symbols having the same type-name.
+
+ * data/lalr1.cc (b4_char_sizeof_): New.
+ (b4_char_sizeof): Use it.
+ Adjust to be called with a list of numbers instead of a single
+ number.
+ Adjust its caller for new-line issues.
+
2008-11-13 Akim Demaille <demaille@gostai.com>
Define the "identifier" of a symbol.
2008-11-13 Akim Demaille <demaille@gostai.com>
Define the "identifier" of a symbol.
dummy[]_b4_char_sizeof_counter])
dummy[]_b4_char_sizeof_counter])
-# b4_char_sizeof(SYMBOL-NUM)
+# b4_char_sizeof_(SYMBOL-NUM)
+# ---------------------------
+# A comment describing this symbol.
+m4_define([b4_char_sizeof_],
+[ // b4_symbol([$1], [tag])
+])
+
+# b4_char_sizeof(SYMBOL-NUMS)
# --------------------------
# To be mapped on the list of type names to produce:
#
# --------------------------
# To be mapped on the list of type names to produce:
#
# char dummy2[sizeof(type_name_2)];
#
# for defined type names.
# char dummy2[sizeof(type_name_2)];
#
# for defined type names.
-# $3 is doubly-quoted, do not quote it again.
m4_define([b4_char_sizeof],
m4_define([b4_char_sizeof],
-[m4_ifval(b4_symbol([$1], [type_name]),
+[b4_symbol_if([$1], [has_type_name],
- char _b4_char_sizeof_dummy@{sizeof([b4_symbol([$1], [type_name])])@}; // b4_symbol([$1], [tag])])dnl
-])
+m4_map([b4_char_sizeof_], [$@])dnl
+ char _b4_char_sizeof_dummy@{sizeof([b4_symbol([$1], [type_name])])@};
+])])
m4_pushdef([b4_copyright_years],
m4_pushdef([b4_copyright_years],
]b4_variant_if(
[ /// An auxiliary type to compute the largest semantic type.
union union_type
]b4_variant_if(
[ /// An auxiliary type to compute the largest semantic type.
union union_type
- {]m4_map([b4_char_sizeof], m4_defn([b4_symbol_numbers]))[
- };
+ {]m4_map([b4_char_sizeof], m4_defn([b4_type_names]))[};
/// Symbol semantic values.
typedef variant<sizeof(union_type)> semantic_type;],
/// Symbol semantic values.
typedef variant<sizeof(union_type)> semantic_type;],