X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/361444e4197b4b70790ebce25ef509d1eda963b0..0149d39e6e5cb4384c07d92c00908d0099d5e009:/data/variant.hh diff --git a/data/variant.hh b/data/variant.hh index 968d6496..ac4f7a78 100644 --- a/data/variant.hh +++ b/data/variant.hh @@ -63,7 +63,7 @@ m4_define([b4_char_sizeof], [b4_symbol_if([$1], [has_type], [ m4_map([ b4_symbol_tag_comment], [$@])dnl - char _b4_char_sizeof_dummy@{sizeof([b4_symbol([$1], [type])])@}; + char _b4_char_sizeof_dummy@{sizeof(b4_symbol([$1], [type]))@}; ])]) @@ -95,22 +95,22 @@ m4_define([b4_variant_define], /// Empty construction. variant ()]b4_parse_assert_if([ - : tname (YY_NULL)])[ + : yytname_ (YY_NULL)])[ {} /// Construct and fill. template variant (const T& t)]b4_parse_assert_if([ - : tname (typeid (T).name ())])[ + : yytname_ (typeid (T).name ())])[ { YYASSERT (sizeof (T) <= S); - new (as_ ()) T (t); + new (yyas_ ()) T (t); } /// Destruction, allowed only if empty. ~variant () {]b4_parse_assert_if([ - YYASSERT (!tname); + YYASSERT (!yytname_); ])[} /// Instantiate an empty \a T in here. @@ -118,10 +118,10 @@ m4_define([b4_variant_define], T& build () {]b4_parse_assert_if([ - YYASSERT (!tname); + YYASSERT (!yytname_); YYASSERT (sizeof (T) <= S); - tname = typeid (T).name ();])[ - return *new (as_ ()) T; + yytname_ = typeid (T).name ();])[ + return *new (yyas_ ()) T; } /// Instantiate a \a T in here from \a t. @@ -129,10 +129,10 @@ m4_define([b4_variant_define], T& build (const T& t) {]b4_parse_assert_if([ - YYASSERT (!tname); + YYASSERT (!yytname_); YYASSERT (sizeof (T) <= S); - tname = typeid (T).name ();])[ - return *new (as_ ()) T (t); + yytname_ = typeid (T).name ();])[ + return *new (yyas_ ()) T (t); } /// Accessor to a built \a T. @@ -140,9 +140,9 @@ m4_define([b4_variant_define], T& as () {]b4_parse_assert_if([ - YYASSERT (tname == typeid (T).name ()); + YYASSERT (yytname_ == typeid (T).name ()); YYASSERT (sizeof (T) <= S);])[ - return *as_ (); + return *yyas_ (); } /// Const accessor to a built \a T (for %printer). @@ -150,9 +150,9 @@ m4_define([b4_variant_define], const T& as () const {]b4_parse_assert_if([ - YYASSERT (tname == typeid (T).name ()); + YYASSERT (yytname_ == typeid (T).name ()); YYASSERT (sizeof (T) <= S);])[ - return *as_ (); + return *yyas_ (); } /// Swap the content with \a other, of same type. @@ -167,8 +167,8 @@ m4_define([b4_variant_define], void swap (self_type& other) {]b4_parse_assert_if([ - YYASSERT (tname); - YYASSERT (tname == other.tname);])[ + YYASSERT (yytname_); + YYASSERT (yytname_ == other.yytname_);])[ std::swap (as (), other.as ()); } @@ -179,7 +179,7 @@ m4_define([b4_variant_define], void move (self_type& other) {]b4_parse_assert_if([ - YYASSERT (!tname);])[ + YYASSERT (!yytname_);])[ build (); swap (other); other.destroy (); @@ -199,7 +199,7 @@ m4_define([b4_variant_define], destroy () { as ().~T ();]b4_parse_assert_if([ - tname = YY_NULL;])[ + yytname_ = YY_NULL;])[ } private: @@ -210,32 +210,31 @@ m4_define([b4_variant_define], /// Accessor to raw memory as \a T. template T* - as_ () + yyas_ () { - void *yyp = buffer.raw; + void *yyp = yybuffer_.yyraw; return static_cast (yyp); } /// Const accessor to raw memory as \a T. template const T* - as_ () const + yyas_ () const { - const void *yyp = buffer.raw; + const void *yyp = yybuffer_.yyraw; return static_cast (yyp); } - /// A buffer large enough to store any of the semantic values. - /// Long double is chosen as it has the strongest alignment - /// constraints. union { - long double align_me; - char raw[S]; - } buffer;]b4_parse_assert_if([ + /// Strongest alignment constraints. + long double yyalign_me; + /// A buffer large enough to store any of the semantic values. + char yyraw[S]; + } yybuffer_;]b4_parse_assert_if([ /// Whether the content is built: if defined, the name of the stored type. - const char *tname;])[ + const char *yytname_;])[ }; ]]) @@ -245,16 +244,16 @@ m4_define([b4_variant_define], ## -------------------------- ## -# b4_semantic_type_declare -# ------------------------ +# b4_value_type_declare +# --------------------- # Declare semantic_type. -m4_define([b4_semantic_type_declare], -[ /// An auxiliary type to compute the largest semantic type. +m4_define([b4_value_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;dnl + typedef variant semantic_type;][]dnl ]) @@ -329,7 +328,7 @@ b4_join(b4_symbol_if([$1], [has_type], # b4_basic_symbol_constructor_declare -# ---------------------------------- +# ----------------------------------- # Generate a constructor declaration for basic_symbol from given type. m4_define([b4_basic_symbol_constructor_declare], [[