$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r73588 - trunk/libs/spirit/example/qi/compiler_tutorial/conjure3
From: joel_at_[hidden]
Date: 2011-08-06 20:39:41
Author: djowel
Date: 2011-08-06 20:39:40 EDT (Sat, 06 Aug 2011)
New Revision: 73588
URL: http://svn.boost.org/trac/boost/changeset/73588
Log:
make operand an extended_variant so we can tag it (among other things).
Text files modified: 
   trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/annotation.hpp |     1 +                                       
   trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/ast.hpp        |    18 +++++++++++++++---                      
   2 files changed, 16 insertions(+), 3 deletions(-)
Modified: trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/annotation.hpp
==============================================================================
--- trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/annotation.hpp	(original)
+++ trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/annotation.hpp	2011-08-06 20:39:40 EDT (Sat, 06 Aug 2011)
@@ -96,6 +96,7 @@
             int id = iters.size();
             iters.push_back(pos);
             boost::apply_visitor(set_annotation_id(id), ast);
+            ast.id = id;
         }
 
         void operator()(ast::variable_declaration& ast, Iterator pos) const
Modified: trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/ast.hpp
==============================================================================
--- trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/ast.hpp	(original)
+++ trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/ast.hpp	2011-08-06 20:39:40 EDT (Sat, 06 Aug 2011)
@@ -47,7 +47,8 @@
         boost::spirit::extended_variant<
             nil
           , bool
-          , unsigned int>
+          , unsigned int
+        >
     {
         literal() : base_type() {}
         literal(bool val) : base_type(val) {}
@@ -56,7 +57,9 @@
             : base_type(rhs.get()) {}
     };
 
-    typedef boost::variant<
+    struct operand :
+        tagged,
+        boost::spirit::extended_variant<
             nil
           , literal
           , identifier
@@ -64,7 +67,16 @@
           , boost::recursive_wrapper<function_call>
           , boost::recursive_wrapper<expression>
         >
-    operand;
+    {
+        operand() : base_type() {}
+        operand(literal const& val) : base_type(val) {}
+        operand(identifier const& val) : base_type(val) {}
+        operand(unary const& val) : base_type(val) {}
+        operand(function_call const& val) : base_type(val) {}
+        operand(expression const& val) : base_type(val) {}
+        operand(operand const& rhs)
+            : base_type(rhs.get()) {}
+    };
 
     struct unary : tagged
     {