Changeset 44610


Ignore:
Timestamp:
Apr 20, 2008, 8:27:25 AM (10 years ago)
Author:
Joel de Guzman
Message:

various fixes

Location:
trunk/boost/spirit/home
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp

    r44608 r44610  
    3232        // wrap phoenix actor, make sure first argument is a fusion sequence
    3333        template <typename Eval>
    34         static void phoenix_action(phoenix::actor<Eval> const& f, 
     34        static void phoenix_action(phoenix::actor<Eval> const& f,
    3535            Attribute const& attr, std::size_t id, bool& pass, Context& ctx)
    3636        {
    3737            f(spirit::detail::pass_value<Attribute const>::call(attr), id, pass, ctx);
    3838        }
    39        
     39
    4040        template <typename Eval>
    4141        static FunctionType call(phoenix::actor<Eval> const& f)
    4242        {
    43 //             using phoenix::arg_names::arg1;
    44 //             using phoenix::arg_names::arg2;
    45 //             using phoenix::arg_names::arg3;
    46 //             using phoenix::arg_names::arg4;
    47 //
    48 //             return phoenix::bind(
    49 //                 &wrap_action::phoenix_action<Eval>, f, arg1, arg2, arg3, arg4);
     43             using phoenix::arg_names::arg1;
     44             using phoenix::arg_names::arg2;
     45             using phoenix::arg_names::arg3;
     46             using phoenix::arg_names::arg4;
    5047
    51             return boost::bind(
    52                 &wrap_action::phoenix_action<Eval>, f, _1, _2, _3, _4);
     48            void (*pf)(phoenix::actor<Eval> const&,
     49                Attribute const&, std::size_t, bool&, Context&) =
     50                    &wrap_action::phoenix_action;
     51
     52             return phoenix::bind(pf, f, arg1, arg2, arg3, arg4);
     53
     54            //~ return boost::bind(
     55                //~ &wrap_action::phoenix_action<Eval>, f, _1, _2, _3, _4);
    5356        }
    5457
    5558        // semantic actions with 3 arguments
    5659        template <typename F>
    57         static void arg3_action(F* f, Attribute const& attr, 
     60        static void arg3_action(F* f, Attribute const& attr,
    5861            std::size_t id, bool& pass, Context&)
    5962        {
     
    7477        // semantic actions with 2 arguments
    7578        template <typename F>
    76         static void arg2_action(F* f, Attribute const& attr, 
     79        static void arg2_action(F* f, Attribute const& attr,
    7780            std::size_t id, bool&, Context&)
    7881        {
     
    9295        // semantic actions with 1 argument
    9396        template <typename F>
    94         static void arg1_action(F* f, Attribute const& attr, 
     97        static void arg1_action(F* f, Attribute const& attr,
    9598            std::size_t, bool&, Context&)
    9699        {
  • trunk/boost/spirit/home/qi/char/char.hpp

    r44569 r44610  
    5353        };
    5454
    55         template <typename Char_, typename CharParam>
    56         static bool test_impl(Char_ ch, CharParam param)
    57         {
    58             // tests plain chars
    59             return ch == param;
    60         }
    61 
    62         template <typename Char_, typename CharParam>
    63         static bool test_impl(Char_ const* ch, CharParam param)
    64         {
    65             // tests single char null terminated strings
    66             return *ch == param;
    67         }
    68 
    69         template <typename Component, typename CharParam, typename Context>
    70         static bool test(Component const& component, CharParam ch, Context&)
    71         {
    72             return test_impl(fusion::at_c<0>(component.elements), ch);
     55        static Char get_char(Char ch)
     56        {
     57            return ch;
     58        }
     59
     60        static Char get_char(Char const* str)
     61        {
     62            return *str;
     63        }
     64
     65        template <typename Component, typename CharParam, typename Context>
     66        static bool test(Component const& component, CharParam ch, Context&)
     67        {
     68            return get_char(fusion::at_c<0>(component.elements)) == ch;
    7369        }
    7470
     
    7874            return std::string("'")
    7975                + spirit::detail::to_narrow_char(
    80                     fusion::at_c<0>(component.elements))
     76                    get_char(fusion::at_c<0>(component.elements)))
    8177                + '\'';
    8278        }
     
    205201        };
    206202
    207         template <typename Component, typename CharParam, typename Context>
    208         static bool test(Component const& component, CharParam ch, Context&)
    209         {
    210             return fusion::at_c<0>(component.elements) == ch
    211                 || fusion::at_c<1>(component.elements) == ch
     203        static Char get_char(Char ch)
     204        {
     205            return ch;
     206        }
     207
     208        static Char get_char(Char const* str)
     209        {
     210            return *str;
     211        }
     212
     213        template <typename Component, typename CharParam, typename Context>
     214        static bool test(Component const& component, CharParam ch, Context&)
     215        {
     216            return get_char(fusion::at_c<0>(component.elements)) == ch
     217                || get_char(fusion::at_c<1>(component.elements)) == ch
    212218            ;
    213219        }
     
    217223        {
    218224            std::string result;
    219             result += std::string("'") + fusion::at_c<0>(component.elements) + '\'';
     225            result += std::string("'")
     226                + spirit::detail::to_narrow_char(
     227                    get_char(fusion::at_c<0>(component.elements))) + '\'';
    220228            result += " or ";
    221             result += std::string("'") + fusion::at_c<1>(component.elements) + '\'';
     229            result += std::string("'") +
     230                spirit::detail::to_narrow_char(
     231                    get_char(fusion::at_c<1>(component.elements))) + '\'';
    222232            return result;
    223233        }
     
    322332        type;
    323333
     334        static Char get_char(Char ch)
     335        {
     336            return ch;
     337        }
     338
     339        static Char get_char(Char const* str)
     340        {
     341            return *str;
     342        }
     343
    324344        static type
    325345        call(Elements const& elements)
     
    327347            typedef typename Modifier::char_set char_set;
    328348
    329             Char ch = fusion::at_c<0>(elements);
     349            Char ch = get_char(fusion::at_c<0>(elements));
    330350            vector_type v(
    331351                char_set::tolower(ch)
Note: See TracChangeset for help on using the changeset viewer.