From b9e4eb5b7288c5cdf35f26d74786a3aacf56e137 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 31 Dec 2008 12:44:58 +0100 Subject: [PATCH] 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. --- ChangeLog | 9 +++++++++ data/c++.m4 | 14 ++++++++++++++ data/glr.cc | 10 +--------- data/lalr1.cc | 16 +--------------- data/variant.hh | 12 ++++++++++++ 5 files changed, 37 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index 62c28074..bcf71284 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-03-02 Akim Demaille + + 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 Upgrade gnulib. diff --git a/data/c++.m4 b/data/c++.m4 index ddbb3fa3..a64c740e 100644 --- a/data/c++.m4 +++ b/data/c++.m4 @@ -97,6 +97,20 @@ m4_map_sep([ b4_token_enum], [, ## 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], diff --git a/data/glr.cc b/data/glr.cc index 254bda1e..5cad0b16 100644 --- a/data/glr.cc +++ b/data/glr.cc @@ -266,16 +266,8 @@ b4_copyright([Skeleton interface for Bison GLR parsers in C++], 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 diff --git a/data/lalr1.cc b/data/lalr1.cc index 5c69a149..22441081 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -389,21 +389,7 @@ do { \ { 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 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([ diff --git a/data/variant.hh b/data/variant.hh index 89367338..1534b903 100644 --- a/data/variant.hh +++ b/data/variant.hh @@ -189,6 +189,18 @@ m4_define([b4_variant_definition], ## -------------------------- ## +# 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 semantic_type;]) + + # How the semantic value is extracted when using variants. # b4_symbol_value(VAL, [TYPE]) -- 2.45.2