$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: joel_at_[hidden]
Date: 2008-04-20 04:27:25
Author: djowel
Date: 2008-04-20 04:27:25 EDT (Sun, 20 Apr 2008)
New Revision: 44610
URL: http://svn.boost.org/trac/boost/changeset/44610
Log:
various fixes
Text files modified: 
   trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp |    31 +++++++++++++-----------                
   trunk/boost/spirit/home/qi/char/char.hpp                  |    50 ++++++++++++++++++++++++++++------------
   2 files changed, 52 insertions(+), 29 deletions(-)
Modified: trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp
==============================================================================
--- trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp	(original)
+++ trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp	2008-04-20 04:27:25 EDT (Sun, 20 Apr 2008)
@@ -31,30 +31,33 @@
 
         // wrap phoenix actor, make sure first argument is a fusion sequence
         template <typename Eval>
-        static void phoenix_action(phoenix::actor<Eval> const& f, 
+        static void phoenix_action(phoenix::actor<Eval> const& f,
             Attribute const& attr, std::size_t id, bool& pass, Context& ctx)
         {
             f(spirit::detail::pass_value<Attribute const>::call(attr), id, pass, ctx);
         }
-        
+
         template <typename Eval>
         static FunctionType call(phoenix::actor<Eval> const& f)
         {
-//             using phoenix::arg_names::arg1;
-//             using phoenix::arg_names::arg2;
-//             using phoenix::arg_names::arg3;
-//             using phoenix::arg_names::arg4;
-// 
-//             return phoenix::bind(
-//                 &wrap_action::phoenix_action<Eval>, f, arg1, arg2, arg3, arg4);
+             using phoenix::arg_names::arg1;
+             using phoenix::arg_names::arg2;
+             using phoenix::arg_names::arg3;
+             using phoenix::arg_names::arg4;
+
+            void (*pf)(phoenix::actor<Eval> const&,
+                Attribute const&, std::size_t, bool&, Context&) =
+                    &wrap_action::phoenix_action;
+
+             return phoenix::bind(pf, f, arg1, arg2, arg3, arg4);
 
-            return boost::bind(
-                &wrap_action::phoenix_action<Eval>, f, _1, _2, _3, _4);
+            //~ return boost::bind(
+                //~ &wrap_action::phoenix_action<Eval>, f, _1, _2, _3, _4);
         }
 
         // semantic actions with 3 arguments
         template <typename F>
-        static void arg3_action(F* f, Attribute const& attr, 
+        static void arg3_action(F* f, Attribute const& attr,
             std::size_t id, bool& pass, Context&)
         {
             f(attr, id, pass);
@@ -73,7 +76,7 @@
 
         // semantic actions with 2 arguments
         template <typename F>
-        static void arg2_action(F* f, Attribute const& attr, 
+        static void arg2_action(F* f, Attribute const& attr,
             std::size_t id, bool&, Context&)
         {
             f(attr, id);
@@ -91,7 +94,7 @@
 
         // semantic actions with 1 argument
         template <typename F>
-        static void arg1_action(F* f, Attribute const& attr, 
+        static void arg1_action(F* f, Attribute const& attr,
             std::size_t, bool&, Context&)
         {
             f(attr);
Modified: trunk/boost/spirit/home/qi/char/char.hpp
==============================================================================
--- trunk/boost/spirit/home/qi/char/char.hpp	(original)
+++ trunk/boost/spirit/home/qi/char/char.hpp	2008-04-20 04:27:25 EDT (Sun, 20 Apr 2008)
@@ -52,24 +52,20 @@
             typedef unused_type type;   // literal parsers have no attribute
         };
 
-        template <typename Char_, typename CharParam>
-        static bool test_impl(Char_ ch, CharParam param)
+        static Char get_char(Char ch)
         {
-            // tests plain chars
-            return ch == param;
+            return ch;
         }
 
-        template <typename Char_, typename CharParam>
-        static bool test_impl(Char_ const* ch, CharParam param)
+        static Char get_char(Char const* str)
         {
-            // tests single char null terminated strings
-            return *ch == param;
+            return *str;
         }
 
         template <typename Component, typename CharParam, typename Context>
         static bool test(Component const& component, CharParam ch, Context&)
         {
-            return test_impl(fusion::at_c<0>(component.elements), ch);
+            return get_char(fusion::at_c<0>(component.elements)) == ch;
         }
 
         template <typename Component>
@@ -77,7 +73,7 @@
         {
             return std::string("'")
                 + spirit::detail::to_narrow_char(
-                    fusion::at_c<0>(component.elements))
+                    get_char(fusion::at_c<0>(component.elements)))
                 + '\'';
         }
     };
@@ -204,11 +200,21 @@
             typedef unused_type type;   // literal parsers have no attribute
         };
 
+        static Char get_char(Char ch)
+        {
+            return ch;
+        }
+
+        static Char get_char(Char const* str)
+        {
+            return *str;
+        }
+
         template <typename Component, typename CharParam, typename Context>
         static bool test(Component const& component, CharParam ch, Context&)
         {
-            return fusion::at_c<0>(component.elements) == ch
-                || fusion::at_c<1>(component.elements) == ch
+            return get_char(fusion::at_c<0>(component.elements)) == ch
+                || get_char(fusion::at_c<1>(component.elements)) == ch
             ;
         }
 
@@ -216,9 +222,13 @@
         static std::string what(Component const& component)
         {
             std::string result;
-            result += std::string("'") + fusion::at_c<0>(component.elements) + '\'';
+            result += std::string("'")
+                + spirit::detail::to_narrow_char(
+                    get_char(fusion::at_c<0>(component.elements))) + '\'';
             result += " or ";
-            result += std::string("'") + fusion::at_c<1>(component.elements) + '\'';
+            result += std::string("'") +
+                spirit::detail::to_narrow_char(
+                    get_char(fusion::at_c<1>(component.elements))) + '\'';
             return result;
         }
     };
@@ -321,12 +331,22 @@
             component<qi::domain, qi::no_case_literal_char<Char>, vector_type>
         type;
 
+        static Char get_char(Char ch)
+        {
+            return ch;
+        }
+
+        static Char get_char(Char const* str)
+        {
+            return *str;
+        }
+
         static type
         call(Elements const& elements)
         {
             typedef typename Modifier::char_set char_set;
 
-            Char ch = fusion::at_c<0>(elements);
+            Char ch = get_char(fusion::at_c<0>(elements));
             vector_type v(
                 char_set::tolower(ch)
               , char_set::toupper(ch)