$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r61728 - in trunk/libs/spirit/example/scheme: example/generate_qiexpr output qi
From: hartmut.kaiser_at_[hidden]
Date: 2010-05-01 23:21:11
Author: hkaiser
Date: 2010-05-01 23:21:10 EDT (Sat, 01 May 2010)
New Revision: 61728
URL: http://svn.boost.org/trac/boost/changeset/61728
Log:
Spirit: more changes to scheme stuff
Text files modified: 
   trunk/libs/spirit/example/scheme/example/generate_qiexpr/generate_qiexpr.cpp |     2 +-                                      
   trunk/libs/spirit/example/scheme/output/sexpr.hpp                            |     4 ----                                    
   trunk/libs/spirit/example/scheme/output/utree_traits.hpp                     |    10 ++++++++++                              
   trunk/libs/spirit/example/scheme/qi/qiexpr_generator.hpp                     |    11 ++++++-----                             
   4 files changed, 17 insertions(+), 10 deletions(-)
Modified: trunk/libs/spirit/example/scheme/example/generate_qiexpr/generate_qiexpr.cpp
==============================================================================
--- trunk/libs/spirit/example/scheme/example/generate_qiexpr/generate_qiexpr.cpp	(original)
+++ trunk/libs/spirit/example/scheme/example/generate_qiexpr/generate_qiexpr.cpp	2010-05-01 23:21:10 EDT (Sat, 01 May 2010)
@@ -3,7 +3,7 @@
 //  Distributed under the Boost Software License, Version 1.0. (See accompanying 
 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
-// #define BOOST_SPIRIT_KARMA_DEBUG
+#define BOOST_SPIRIT_KARMA_DEBUG
 
 #include <utree/operators.hpp>
 
Modified: trunk/libs/spirit/example/scheme/output/sexpr.hpp
==============================================================================
--- trunk/libs/spirit/example/scheme/output/sexpr.hpp	(original)
+++ trunk/libs/spirit/example/scheme/output/sexpr.hpp	2010-05-01 23:21:10 EDT (Sat, 01 May 2010)
@@ -23,14 +23,10 @@
     using boost::spirit::karma::rule;
     using boost::spirit::karma::double_;
     using boost::spirit::karma::int_;
-    using boost::spirit::karma::char_;
     using boost::spirit::karma::string;
     using boost::spirit::karma::bool_;
     using boost::spirit::karma::eps;
-    using boost::spirit::karma::space_type;
     using boost::spirit::karma::uint_generator;
-    using boost::spirit::karma::verbatim;
-    using boost::spirit::karma::delimit;
     using boost::spirit::karma::hex;
     using boost::spirit::karma::right_align;
 
Modified: trunk/libs/spirit/example/scheme/output/utree_traits.hpp
==============================================================================
--- trunk/libs/spirit/example/scheme/output/utree_traits.hpp	(original)
+++ trunk/libs/spirit/example/scheme/output/utree_traits.hpp	2010-05-01 23:21:10 EDT (Sat, 01 May 2010)
@@ -33,6 +33,16 @@
     struct not_is_variant<scheme::utree, karma::domain>
       : mpl::false_ {};
 
+    ///////////////////////////////////////////////////////////////////////////
+    // this specialization tells Spirit how to extract the type of the value 
+    // stored in the given utree node
+    template <>
+    struct variant_which<scheme::utree>
+    {
+        static int call(scheme::utree const& u) { return u.which(); }
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
     // The specializations below tell Spirit to verify whether an attribute
     // type is compatible with a given variant type
     template <>
Modified: trunk/libs/spirit/example/scheme/qi/qiexpr_generator.hpp
==============================================================================
--- trunk/libs/spirit/example/scheme/qi/qiexpr_generator.hpp	(original)
+++ trunk/libs/spirit/example/scheme/qi/qiexpr_generator.hpp	2010-05-01 23:21:10 EDT (Sat, 01 May 2010)
@@ -39,7 +39,7 @@
         struct deref_spec 
           : boost::spirit::result_of::terminal<boost::spirit::tag::repeat(Count)>
         {};
-    };
+    }
 
     template <typename Count>
     inline typename traits::deref_spec<Count>::type
@@ -66,6 +66,7 @@
             using boost::spirit::karma::_r1;
             using boost::spirit::karma::strict;
             using boost::spirit::karma::eol;
+            using boost::phoenix::ref;
 
             start = 
                     nil 
@@ -78,25 +79,25 @@
                 ;
 
             rule_ =
-                    &symbol(std::string("define")) 
+                    &symbol(ref("define")) 
                         << deref[rule_name] << '=' << deref[alternative]
                 |   alternative
                 ;
 
             alternative = 
-                    &symbol(std::string("qi:|")) 
+                    &symbol(ref("qi:|")) 
                         << '(' << strict[permutation % '|'] << ')'
                 |   permutation
                 ;
 
             permutation = 
-                    &symbol(std::string("qi:^")) 
+                    &symbol(ref("qi:^")) 
                         << '(' << strict[sequence % '^'] << ')'
                 |   sequence
                 ;
 
             sequence = 
-                    &symbol(std::string("qi:>>")) 
+                    &symbol(ref("qi:>>")) 
                         << '(' << strict[term % ">>"] << ')'
                 |   term
                 ;