From e9805e574361e4f4b344d1b92b75c30dc8c325bd Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 26 Aug 2008 20:25:58 +0200 Subject: [PATCH] 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. --- ChangeLog | 13 +++++++++++++ data/lalr1.cc | 20 +++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3ea95f18..cd1254c6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2008-11-13 Akim Demaille + + 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 Define the "identifier" of a symbol. diff --git a/data/lalr1.cc b/data/lalr1.cc index 01b8166a..83fcfdd6 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -307,7 +307,14 @@ m4_define([_b4_char_sizeof_dummy], 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: # @@ -315,12 +322,12 @@ dummy[]_b4_char_sizeof_counter]) # 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_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], @@ -510,8 +517,7 @@ do { \ ]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 semantic_type;], -- 2.47.2