]> git.saurik.com Git - bison.git/blobdiff - data/variant.hh
style: space changes
[bison.git] / data / variant.hh
index e2a537ad3d694d7e0f19bda3f63c48e2596b9067..968d64964406e6a414f01ca52afce677c96598fb 100644 (file)
@@ -26,7 +26,7 @@
 # YYTYPE.
 m4_define([b4_symbol_variant],
 [m4_pushdef([b4_dollar_dollar],
-            [$2.$3< $][3 >(m4_shift3($@))])dnl
+            [$2.$3< $][3 > (m4_shift3($@))])dnl
   switch ($1)
     {
 b4_type_foreach([b4_type_action_])[]dnl
@@ -104,7 +104,7 @@ m4_define([b4_variant_define],
       : tname (typeid (T).name ())])[
     {
       YYASSERT (sizeof (T) <= S);
-      new (buffer.raw) T (t);
+      new (as_ <T> ()) T (t);
     }
 
     /// Destruction, allowed only if empty.
@@ -121,7 +121,7 @@ m4_define([b4_variant_define],
       YYASSERT (!tname);
       YYASSERT (sizeof (T) <= S);
       tname = typeid (T).name ();])[
-      return *new (buffer.raw) T;
+      return *new (as_<T> ()) T;
     }
 
     /// Instantiate a \a T in here from \a t.
@@ -132,7 +132,7 @@ m4_define([b4_variant_define],
       YYASSERT (!tname);
       YYASSERT (sizeof (T) <= S);
       tname = typeid (T).name ();])[
-      return *new (buffer.raw) T (t);
+      return *new (as_<T> ()) T (t);
     }
 
     /// Accessor to a built \a T.
@@ -142,10 +142,7 @@ m4_define([b4_variant_define],
     {]b4_parse_assert_if([
       YYASSERT (tname == typeid (T).name ());
       YYASSERT (sizeof (T) <= S);])[
-      {
-        void *dummy = buffer.raw;
-        return *static_cast<T*> (dummy);
-      }
+      return *as_<T> ();
     }
 
     /// Const accessor to a built \a T (for %printer).
@@ -155,10 +152,7 @@ m4_define([b4_variant_define],
     {]b4_parse_assert_if([
       YYASSERT (tname == typeid (T).name ());
       YYASSERT (sizeof (T) <= S);])[
-      {
-        const void *dummy = buffer.raw;
-        return *static_cast<const T*> (dummy);
-      }
+      return *as_<T> ();
     }
 
     /// Swap the content with \a other, of same type.
@@ -175,7 +169,7 @@ m4_define([b4_variant_define],
     {]b4_parse_assert_if([
       YYASSERT (tname);
       YYASSERT (tname == other.tname);])[
-      std::swap (as<T>(), other.as<T>());
+      std::swap (as<T> (), other.as<T> ());
     }
 
     /// Move the content of \a other to this.
@@ -186,9 +180,9 @@ m4_define([b4_variant_define],
     move (self_type& other)
     {]b4_parse_assert_if([
       YYASSERT (!tname);])[
-      build<T>();
-      swap<T>(other);
-      other.destroy<T>();
+      build<T> ();
+      swap<T> (other);
+      other.destroy<T> ();
     }
 
     /// Copy the content of \a other to this.
@@ -213,6 +207,24 @@ m4_define([b4_variant_define],
     self_type& operator=(const self_type&);
     variant (const self_type&);
 
+    /// Accessor to raw memory as \a T.
+    template <typename T>
+    T*
+    as_ ()
+    {
+      void *yyp = buffer.raw;
+      return static_cast<T*> (yyp);
+     }
+
+    /// Const accessor to raw memory as \a T.
+    template <typename T>
+    const T*
+    as_ () const
+    {
+      const void *yyp = buffer.raw;
+      return static_cast<const T*> (yyp);
+     }
+
     /// A buffer large enough to store any of the semantic values.
     /// Long double is chosen as it has the strongest alignment
     /// constraints.
@@ -223,7 +235,7 @@ m4_define([b4_variant_define],
     } buffer;]b4_parse_assert_if([
 
     /// Whether the content is built: if defined, the name of the stored type.
-    const chartname;])[
+    const char *tname;])[
   };
 ]])
 
@@ -252,7 +264,7 @@ m4_define([b4_semantic_type_declare],
 # ----------------------------
 m4_define([b4_symbol_value],
 [m4_ifval([$2],
-          [$1.as< $2 >()],
+          [$1.as< $2 > ()],
           [$1])])
 
 # b4_symbol_value_template(VAL, [TYPE])
@@ -260,7 +272,7 @@ m4_define([b4_symbol_value],
 # Same as b4_symbol_value, but used in a template method.
 m4_define([b4_symbol_value_template],
 [m4_ifval([$2],
-          [$1.template as< $2 >()],
+          [$1.template as< $2 > ()],
           [$1])])