Ticket #7621: qi_bool.patch

File qi_bool.patch, 3.0 KB (added by K-ballo <kaballo86@…>, 10 years ago)

patch in unified diff format

  • D:\

    old new  
    143143    struct any_bool_parser
    144144      : primitive_parser<any_bool_parser<T, BoolPolicies> >
    145145    {
     146        any_bool_parser(BoolPolicies const& p = BoolPolicies())
     147          : p_(p) {}
     148
    146149        template <typename Context, typename Iterator>
    147150        struct attribute
    148151        {
     
    157160        {
    158161            typedef detail::bool_impl<T, BoolPolicies> extract;
    159162            qi::skip_over(first, last, skipper);
    160             return extract::parse(first, last, attr, BoolPolicies());
     163            return extract::parse(first, last, attr, p_);
    161164        }
    162165
    163166        template <typename Context>
     
    165168        {
    166169            return info("boolean");
    167170        }
     171
     172        BoolPolicies p_;
    168173    };
    169174
    170175    template <typename T, typename BoolPolicies = bool_policies<T>
     
    173178      : primitive_parser<literal_bool_parser<T, BoolPolicies, no_attribute> >
    174179    {
    175180        template <typename Value>
    176         literal_bool_parser(Value const& n) : n_(n) {}
     181        literal_bool_parser(Value const& n
     182            , BoolPolicies const& p = BoolPolicies())
     183          : n_(n), p_(p) {}
    177184
    178185        template <typename Context, typename Iterator>
    179186        struct attribute
     
    188195        {
    189196            typedef detail::bool_impl<T, BoolPolicies> extract;
    190197            qi::skip_over(first, last, skipper);
    191             return extract::parse(first, last, attr, BoolPolicies(), n_, n_);
     198            return extract::parse(first, last, attr, p_, n_, n_);
    192199        }
    193200
    194201        template <typename Context>
     
    198205        }
    199206
    200207        T n_;
     208        BoolPolicies p_;
    201209    };
    202210
    203211    ///////////////////////////////////////////////////////////////////////////
     
    218226          , any_bool_parser<T, no_case_bool_policies<T> >
    219227          , any_bool_parser<T, Policies> >::type
    220228        result_type;
    221 
    222         result_type operator()(unused_type, unused_type) const
     229       
     230        template <typename Terminal>
     231        result_type operator()(Terminal const& term, unused_type) const
    223232        {
    224             return result_type();
     233            typedef tag::stateful_tag<Policies, tag::bool_, T> tag_type;
     234            using spirit::detail::get_stateful_data;
     235            return result_type(get_stateful_data<tag_type>::call(term));
    225236        }
    226237    };
    227238
     
    244255        template <typename Terminal>
    245256        result_type operator()(Terminal const& term, unused_type) const
    246257        {
    247             return result_type(fusion::at_c<0>(term.args));
     258            typedef tag::stateful_tag<Policies, tag::bool_, T> tag_type;
     259            using spirit::detail::get_stateful_data;
     260            return result_type(fusion::at_c<0>(term.args)
     261                , get_stateful_data<tag_type>::call(term.term));
    248262        }
    249263    };
    250264