$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r67679 - in trunk/boost/spirit/home/lex: . lexer qi
From: hartmut.kaiser_at_[hidden]
Date: 2011-01-05 08:53:01
Author: hkaiser
Date: 2011-01-05 08:53:00 EST (Wed, 05 Jan 2011)
New Revision: 67679
URL: http://svn.boost.org/trac/boost/changeset/67679
Log:
Spirit: fixing lexer regression introduced with new customization points
Text files modified: 
   trunk/boost/spirit/home/lex/lexer/token_def.hpp   |    14 ++++++++++++++                          
   trunk/boost/spirit/home/lex/qi/state_switcher.hpp |    16 ++++++++++++++++                        
   trunk/boost/spirit/home/lex/reference.hpp         |    12 ++++++++++++                            
   3 files changed, 42 insertions(+), 0 deletions(-)
Modified: trunk/boost/spirit/home/lex/lexer/token_def.hpp
==============================================================================
--- trunk/boost/spirit/home/lex/lexer/token_def.hpp	(original)
+++ trunk/boost/spirit/home/lex/lexer/token_def.hpp	2011-01-05 08:53:00 EST (Wed, 05 Jan 2011)
@@ -13,6 +13,7 @@
 #include <boost/spirit/home/support/unused.hpp>
 #include <boost/spirit/home/support/argument.hpp>
 #include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
 #include <boost/spirit/home/qi/parser.hpp>
 #include <boost/spirit/home/qi/skip_over.hpp>
 #include <boost/spirit/home/qi/detail/construct.hpp>
@@ -221,7 +222,20 @@
         mutable std::size_t unique_id_;
         mutable std::size_t token_state_;
     };
+}}}
 
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template<typename Attribute, typename Char, typename Idtype
+      , typename Attr, typename Context, typename Iterator>
+    struct handles_container<
+            lex::token_def<Attribute, Char, Idtype>, Attr, Context, Iterator>
+      : traits::is_container<
+            typename attribute_of<
+                lex::token_def<Attribute, Char, Idtype>, Context, Iterator
+            >::type>
+    {};
 }}}
 
 #if defined(BOOST_MSVC)
Modified: trunk/boost/spirit/home/lex/qi/state_switcher.hpp
==============================================================================
--- trunk/boost/spirit/home/lex/qi/state_switcher.hpp	(original)
+++ trunk/boost/spirit/home/lex/qi/state_switcher.hpp	2011-01-05 08:53:00 EST (Wed, 05 Jan 2011)
@@ -15,6 +15,8 @@
 #include <boost/spirit/home/qi/detail/attributes.hpp>
 #include <boost/spirit/home/support/common_terminals.hpp>
 #include <boost/spirit/home/support/string_traits.hpp>
+#include <boost/spirit/home/support/has_semantic_action.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
 #include <boost/spirit/home/qi/skip_over.hpp>
 #include <boost/spirit/home/qi/domain.hpp>
 #include <boost/spirit/home/qi/parser.hpp>
@@ -244,7 +246,21 @@
             return result_type(subject, fusion::at_c<0>(term.args));
         }
     };
+}}}
+
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename State>
+    struct has_semantic_action<qi::state_switcher_context<Subject, State> >
+      : unary_has_semantic_action<Subject> {};
 
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename State, typename Attribute
+        , typename Context, typename Iterator>
+    struct handles_container<qi::state_switcher_context<Subject, State>
+          , Attribute, Context, Iterator>
+      : unary_handles_container<Subject, Attribute, Context, Iterator> {}; 
 }}}
 
 #endif
Modified: trunk/boost/spirit/home/lex/reference.hpp
==============================================================================
--- trunk/boost/spirit/home/lex/reference.hpp	(original)
+++ trunk/boost/spirit/home/lex/reference.hpp	2011-01-05 08:53:00 EST (Wed, 05 Jan 2011)
@@ -15,6 +15,7 @@
 #include <boost/spirit/home/lex/lexer_type.hpp>
 #include <boost/spirit/home/qi/reference.hpp>
 #include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/handles_container.hpp>
 #include <boost/ref.hpp>
 
 namespace boost { namespace spirit { namespace lex
@@ -67,7 +68,18 @@
             return this->ref.get().state(); 
         }
     };
+}}}
 
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Subject, typename IdType
+      , typename Attribute, typename Context, typename Iterator>
+    struct handles_container<lex::reference<Subject, IdType>
+          , Attribute, Context, Iterator>
+      : handles_container<
+            typename remove_const<Subject>::type, Attribute, Context, Iterator> 
+    {};
 }}}
 
 #endif