Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r57447 - in branches/release: boost/spirit boost/spirit/home boost/spirit/home/karma boost/spirit/home/karma/operator boost/spirit/home/qi/nonterminal boost/spirit/home/qi/numeric/detail boost/spirit/home/support boost/spirit/repository/home/qi/nonterminal libs/spirit libs/spirit/classic/example libs/spirit/doc libs/spirit/doc/html/spirit/abstracts/customize libs/spirit/doc/html/spirit/abstracts/indepth libs/spirit/example libs/spirit/phoenix libs/spirit/test libs/spirit/test/karma libs/spirit/test/qi
From: hartmut.kaiser_at_[hidden]
Date: 2009-11-07 09:22:39


Author: hkaiser
Date: 2009-11-07 09:22:39 EST (Sat, 07 Nov 2009)
New Revision: 57447
URL: http://svn.boost.org/trac/boost/changeset/57447

Log:
Spirit: merging fixes from trunk
Properties modified:
   branches/release/boost/spirit/ (props changed)
   branches/release/boost/spirit/home/ (props changed)
   branches/release/boost/spirit/home/karma/ (props changed)
   branches/release/boost/spirit/home/qi/nonterminal/rule.hpp (props changed)
   branches/release/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp (props changed)
   branches/release/boost/spirit/home/support/attributes.hpp (props changed)
   branches/release/boost/spirit/repository/home/qi/nonterminal/subrule.hpp (props changed)
   branches/release/libs/spirit/ (props changed)
   branches/release/libs/spirit/classic/example/ (props changed)
   branches/release/libs/spirit/doc/ (props changed)
   branches/release/libs/spirit/doc/html/spirit/abstracts/customize/ (props changed)
   branches/release/libs/spirit/doc/html/spirit/abstracts/indepth/ (props changed)
   branches/release/libs/spirit/example/ (props changed)
   branches/release/libs/spirit/phoenix/ (props changed)
   branches/release/libs/spirit/test/ (props changed)
   branches/release/libs/spirit/test/qi/optional.cpp (props changed)
Text files modified:
   branches/release/boost/spirit/home/karma/operator/alternative.hpp | 50 ++-------------------------------------
   branches/release/libs/spirit/test/karma/alternative.cpp | 12 +++++++++
   2 files changed, 15 insertions(+), 47 deletions(-)

Modified: branches/release/boost/spirit/home/karma/operator/alternative.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/operator/alternative.hpp (original)
+++ branches/release/boost/spirit/home/karma/operator/alternative.hpp 2009-11-07 09:22:39 EST (Sat, 07 Nov 2009)
@@ -101,37 +101,14 @@
         alternative(Elements const& elements)
           : elements(elements) {}
 
- // this is the implementation for non-optional and non-empty optional
- // attributes
         template <
             typename OutputIterator, typename Context, typename Delimiter
           , typename Attribute>
- bool generate_dispatch(OutputIterator& sink, Context& ctx
- , Delimiter const& d, Attribute const& attr, mpl::true_) const
- {
- typedef typename
- traits::extract_from_attribute<Attribute>::type attr_type;
- typedef detail::alternative_generate_functor<
- OutputIterator, Context, Delimiter
- , typename remove_const<
- typename remove_reference<attr_type>::type>::type
- > functor;
-
- // f return true if *any* of the parser succeeds
- functor f (sink, ctx, d, traits::extract_from(attr, ctx));
- return fusion::any(elements, f);
- }
-
- // this is the implementation for empty optional attributes, the empty
- // optional is passed through to the embedded generators
- template <
- typename OutputIterator, typename Context, typename Delimiter
- , typename Optional>
- bool generate_optional(OutputIterator& sink, Context& ctx
- , Delimiter const& d, Optional const& attr) const
+ bool generate(OutputIterator& sink, Context& ctx
+ , Delimiter const& d, Attribute const& attr) const
         {
             typedef detail::alternative_generate_functor<
- OutputIterator, Context, Delimiter, Optional
+ OutputIterator, Context, Delimiter, Attribute
> functor;
 
             // f return true if *any* of the parser succeeds
@@ -139,27 +116,6 @@
             return fusion::any(elements, f);
         }
 
- template <
- typename OutputIterator, typename Context, typename Delimiter
- , typename Attribute>
- bool generate_dispatch(OutputIterator& sink, Context& ctx
- , Delimiter const& d, Attribute const& attr, mpl::false_) const
- {
- if (!traits::has_optional_value(attr))
- return generate_optional(sink, ctx, d, attr);
- return generate_dispatch(sink, ctx, d, attr, mpl::true_());
- }
-
- template <
- typename OutputIterator, typename Context, typename Delimiter
- , typename Attribute>
- bool generate(OutputIterator& sink, Context& ctx
- , Delimiter const& d, Attribute const& attr) const
- {
- return generate_dispatch(sink, ctx, d, attr
- , traits::not_is_optional<Attribute>());
- }
-
         template <typename Context>
         info what(Context& context) const
         {

Modified: branches/release/libs/spirit/test/karma/alternative.cpp
==============================================================================
--- branches/release/libs/spirit/test/karma/alternative.cpp (original)
+++ branches/release/libs/spirit/test/karma/alternative.cpp 2009-11-07 09:22:39 EST (Sat, 07 Nov 2009)
@@ -225,6 +225,18 @@
         BOOST_TEST(test(">1,2,3,4", '>' << r % ',' | karma::eps, v));
     }
 
+ {
+ typedef spirit_test::output_iterator<char>::type outiter_type;
+ namespace karma = boost::spirit::karma;
+
+ karma::rule<outiter_type, boost::optional<int>()> r = int_;
+ boost::optional<int> o;
+ BOOST_TEST(test("error", r | "error", o));
+
+ o = 10;
+ BOOST_TEST(test("10", r | "error", o));
+ }
+
     return boost::report_errors();
 }
 


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk