Ticket #7621: qi_bool.patch
File qi_bool.patch, 3.0 KB (added by , 10 years ago) |
---|
-
D:\
old new 143 143 struct any_bool_parser 144 144 : primitive_parser<any_bool_parser<T, BoolPolicies> > 145 145 { 146 any_bool_parser(BoolPolicies const& p = BoolPolicies()) 147 : p_(p) {} 148 146 149 template <typename Context, typename Iterator> 147 150 struct attribute 148 151 { … … 157 160 { 158 161 typedef detail::bool_impl<T, BoolPolicies> extract; 159 162 qi::skip_over(first, last, skipper); 160 return extract::parse(first, last, attr, BoolPolicies());163 return extract::parse(first, last, attr, p_); 161 164 } 162 165 163 166 template <typename Context> … … 165 168 { 166 169 return info("boolean"); 167 170 } 171 172 BoolPolicies p_; 168 173 }; 169 174 170 175 template <typename T, typename BoolPolicies = bool_policies<T> … … 173 178 : primitive_parser<literal_bool_parser<T, BoolPolicies, no_attribute> > 174 179 { 175 180 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) {} 177 184 178 185 template <typename Context, typename Iterator> 179 186 struct attribute … … 188 195 { 189 196 typedef detail::bool_impl<T, BoolPolicies> extract; 190 197 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_); 192 199 } 193 200 194 201 template <typename Context> … … 198 205 } 199 206 200 207 T n_; 208 BoolPolicies p_; 201 209 }; 202 210 203 211 /////////////////////////////////////////////////////////////////////////// … … 218 226 , any_bool_parser<T, no_case_bool_policies<T> > 219 227 , any_bool_parser<T, Policies> >::type 220 228 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 223 232 { 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)); 225 236 } 226 237 }; 227 238 … … 244 255 template <typename Terminal> 245 256 result_type operator()(Terminal const& term, unused_type) const 246 257 { 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)); 248 262 } 249 263 }; 250 264