From 0623bacc05d3cdcbac1776cf33798ee1022a6e60 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 31 Dec 2008 16:08:02 +0100 Subject: [PATCH] Dub make_TOKEN as a public type interface. * data/c++.m4 (b4_symbol_constructor_declare) (b4_symbol_constructor_define): New empty stubs. (b4_public_types_declare, b4_public_types_define): Use them. * data/lalr1.cc (b4_symbol_constructor_declare) (b4_symbol_constructor_declare_) (b4_symbol_constructor_define_, b4_symbol_constructor_define): Move to... * data/variant.hh: here. Remove the "b4_variant_if" parts, as variant.hh is loaded only if needed. * data/lalr1.cc: No longer invoke b4_symbol_constructor_define and b4_symbol_constructor_declare, as it is now done by b4_public_types_define and b4_public_types_declare. --- ChangeLog | 17 ++++++++++++++++ data/c++.m4 | 15 ++++++++++++-- data/lalr1.cc | 61 ++------------------------------------------------------- data/variant.hh | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+), 61 deletions(-) diff --git a/ChangeLog b/ChangeLog index aefc5965..bf243128 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,22 @@ 2009-03-02 Akim Demaille + Dub make_TOKEN as a public type interface. + * data/c++.m4 (b4_symbol_constructor_declare) + (b4_symbol_constructor_define): New empty stubs. + (b4_public_types_declare, b4_public_types_define): Use them. + * data/lalr1.cc (b4_symbol_constructor_declare) + (b4_symbol_constructor_declare_) + (b4_symbol_constructor_define_, b4_symbol_constructor_define): + Move to... + * data/variant.hh: here. + Remove the "b4_variant_if" parts, as variant.hh is loaded only if + needed. + * data/lalr1.cc: No longer invoke b4_symbol_constructor_define and + b4_symbol_constructor_declare, as it is now done by + b4_public_types_define and b4_public_types_declare. + +2009-03-02 Akim Demaille + Coding style changes. * data/lalr1.cc (b4_symbol_constructor_declaration_) (b4_symbol_constructor_declarations) diff --git a/data/c++.m4 b/data/c++.m4 index 7465d761..9ec967ad 100644 --- a/data/c++.m4 +++ b/data/c++.m4 @@ -186,7 +186,7 @@ m4_define([b4_public_types_declare], /// Its token. inline token_type token () const; }; -]]) +]b4_symbol_constructor_declare]) # b4_public_types_define @@ -281,7 +281,18 @@ m4_define([b4_public_types_define], }; return static_cast (yytoken_number_[type]); } -]])]) +]])[]dnl +b4_symbol_constructor_define]) + + +# b4_symbol_constructor_declare +# b4_symbol_constructor_define +# ----------------------------- +# Declare/define symbol constructors for all the value types. +# Use at class-level. Redefined in variant.hh. +m4_define([b4_symbol_constructor_declare], []) +m4_define([b4_symbol_constructor_define], []) + # b4_lhs_value([TYPE]) diff --git a/data/lalr1.cc b/data/lalr1.cc index b0d14dc0..642fd4e0 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -114,60 +114,6 @@ m4_popdef([b4_at_dollar])dnl m4_popdef([b4_dollar_dollar])dnl ])]) -# b4_symbol_constructor_declare_(SYMBOL-NUMBER) -# --------------------------------------------- -# Declare the overloaded version of make_symbol for the (common) type of -# these SYMBOL-NUMBERS. Use at class-level. -m4_define([b4_symbol_constructor_declare_], -[b4_symbol_if([$1], [is_token], [b4_symbol_if([$1], [has_id], -[ static inline - symbol_type - make_[]b4_symbol_([$1], [id]) (dnl -b4_args(b4_symbol_if([$1], [has_type], - [const b4_symbol([$1], [type])& v]), - b4_locations_if([const location_type& l]))); - -])])]) - - -# b4_symbol_constructor_declare -# ----------------------------- -# Declare symbol constructors for all the value types. -# Use at class-level. -m4_define([b4_symbol_constructor_declare], -[b4_variant_if([ - // Symbol constructors declarations. -b4_symbol_foreach([b4_symbol_constructor_declare_])])]) - - - -# b4_symbol_constructor_define_(SYMBOL-NUMBER) -# -------------------------------------------- -# Define symbol constructor for this SYMBOL-NUMBER. -m4_define([b4_symbol_constructor_define_], -[b4_symbol_if([$1], [is_token], [b4_symbol_if([$1], [has_id], -[ b4_parser_class_name::symbol_type - b4_parser_class_name::make_[]b4_symbol_([$1], [id]) (dnl -b4_args(b4_symbol_if([$1], [has_type], - [const b4_symbol([$1], [type])& v]), - b4_locations_if([const location_type& l]))) - { - return symbol_type (b4_args([yytranslate_ (token::b4_symbol([$1], [id]))], - b4_symbol_if([$1], [has_type], [v]), - b4_locations_if([l]))); - } - -])])]) - - -# b4_symbol_constructor_define -# ---------------------------- -# Define the overloaded versions of make_symbol for all the value types. -m4_define([b4_symbol_constructor_define], -[b4_variant_if([ - // Implementation of make_symbol for each symbol type. -b4_symbol_foreach([b4_symbol_constructor_define_])])]) - # b4_yytranslate_define # --------------------- @@ -287,7 +233,6 @@ do { \ { public: ]b4_public_types_declare[ -]b4_symbol_constructor_declare[ /// Build a parser object. ]b4_parser_class_name[ (]b4_parse_param_decl[); virtual ~]b4_parser_class_name[ (); @@ -436,8 +381,7 @@ do { \ }; ]b4_lex_symbol_if([b4_yytranslate_define -b4_public_types_define -b4_symbol_constructor_define])[ +b4_public_types_define])[ ]b4_namespace_close[ ]b4_percent_define_flag_if([[global_tokens_and_yystype]], @@ -587,8 +531,7 @@ b4_percent_code_get[]dnl | Symbol types. | `---------------*/ -]b4_lex_symbol_if([], [b4_public_types_define -b4_symbol_constructor_define])[ +]b4_lex_symbol_if([], [b4_public_types_define])[ // stack_symbol_type. ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type () diff --git a/data/variant.hh b/data/variant.hh index d36d6269..0c29f7f4 100644 --- a/data/variant.hh +++ b/data/variant.hh @@ -217,3 +217,62 @@ m4_define([b4_symbol_value_template], [m4_ifval([$2], [$1.template as< $2 >()], [$1])]) + + + +## ------------- ## +## make_SYMBOL. ## +## ------------- ## + + +# b4_symbol_constructor_declare_(SYMBOL-NUMBER) +# --------------------------------------------- +# Declare the overloaded version of make_symbol for the (common) type of +# these SYMBOL-NUMBERS. Use at class-level. +m4_define([b4_symbol_constructor_declare_], +[b4_symbol_if([$1], [is_token], [b4_symbol_if([$1], [has_id], +[ static inline + symbol_type + make_[]b4_symbol_([$1], [id]) (dnl +b4_args(b4_symbol_if([$1], [has_type], + [const b4_symbol([$1], [type])& v]), + b4_locations_if([const location_type& l]))); + +])])]) + + +# b4_symbol_constructor_declare +# ----------------------------- +# Declare symbol constructors for all the value types. +# Use at class-level. +m4_define([b4_symbol_constructor_declare], +[ // Symbol constructors declarations. +b4_symbol_foreach([b4_symbol_constructor_declare_])]) + + + +# b4_symbol_constructor_define_(SYMBOL-NUMBER) +# -------------------------------------------- +# Define symbol constructor for this SYMBOL-NUMBER. +m4_define([b4_symbol_constructor_define_], +[b4_symbol_if([$1], [is_token], [b4_symbol_if([$1], [has_id], +[ b4_parser_class_name::symbol_type + b4_parser_class_name::make_[]b4_symbol_([$1], [id]) (dnl +b4_args(b4_symbol_if([$1], [has_type], + [const b4_symbol([$1], [type])& v]), + b4_locations_if([const location_type& l]))) + { + return symbol_type (b4_args([yytranslate_ (token::b4_symbol([$1], [id]))], + b4_symbol_if([$1], [has_type], [v]), + b4_locations_if([l]))); + } + +])])]) + + +# b4_symbol_constructor_define +# ---------------------------- +# Define the overloaded versions of make_symbol for all the value types. +m4_define([b4_symbol_constructor_define], +[ // Implementation of make_symbol for each symbol type. +b4_symbol_foreach([b4_symbol_constructor_define_])]) -- 2.11.4.GIT