Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r49802 - in branches/release: . boost/spirit/home/karma/action boost/spirit/home/karma/auxiliary boost/spirit/home/karma/binary boost/spirit/home/karma/char boost/spirit/home/karma/directive boost/spirit/home/karma/nonterminal boost/spirit/home/karma/numeric boost/spirit/home/karma/operator boost/spirit/home/karma/stream boost/spirit/home/karma/string boost/spirit/home/lex boost/spirit/home/lex/lexer boost/spirit/home/lex/qi/state boost/spirit/home/lex/qi/utility boost/spirit/home/qi/action boost/spirit/home/qi/auxiliary boost/spirit/home/qi/binary boost/spirit/home/qi/char boost/spirit/home/qi/nonterminal boost/spirit/home/qi/numeric boost/spirit/home/qi/operator boost/spirit/home/qi/stream boost/spirit/home/qi/string boost/spirit/home/support boost/spirit/home/support/auxiliary boost/spirit/home/support/meta_grammar boost/spirit/home/support/nonterminal
From: eric_at_[hidden]
Date: 2008-11-16 13:55:41


Author: eric_niebler
Date: 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
New Revision: 49802
URL: http://svn.boost.org/trac/boost/changeset/49802

Log:
port spirit2 to proto v4 (merged from trunk)
Properties modified:
   branches/release/ (props changed)
Text files modified:
   branches/release/boost/spirit/home/karma/action/meta_grammar.hpp | 2
   branches/release/boost/spirit/home/karma/auxiliary/confix.hpp | 8
   branches/release/boost/spirit/home/karma/binary/meta_grammar.hpp | 6
   branches/release/boost/spirit/home/karma/char/meta_grammar.hpp | 6
   branches/release/boost/spirit/home/karma/directive/center_alignment.hpp | 8
   branches/release/boost/spirit/home/karma/directive/left_alignment.hpp | 8
   branches/release/boost/spirit/home/karma/directive/right_alignment.hpp | 8
   branches/release/boost/spirit/home/karma/nonterminal/nonterminal.hpp | 2
   branches/release/boost/spirit/home/karma/numeric/meta_grammar.hpp | 12
   branches/release/boost/spirit/home/karma/operator/meta_grammar.hpp | 2
   branches/release/boost/spirit/home/karma/stream/meta_grammar.hpp | 4
   branches/release/boost/spirit/home/karma/string/meta_grammar.hpp | 6
   branches/release/boost/spirit/home/lex/lexer/meta_grammar.hpp | 4
   branches/release/boost/spirit/home/lex/lexer/terminal_holder.hpp | 2
   branches/release/boost/spirit/home/lex/qi/state/in_state.hpp | 2
   branches/release/boost/spirit/home/lex/qi/state/state_switcher.hpp | 4
   branches/release/boost/spirit/home/lex/qi/utility/plain_token.hpp | 2
   branches/release/boost/spirit/home/lex/set_state.hpp | 2
   branches/release/boost/spirit/home/qi/action/meta_grammar.hpp | 2
   branches/release/boost/spirit/home/qi/auxiliary/confix.hpp | 8
   branches/release/boost/spirit/home/qi/binary/meta_grammar.hpp | 6
   branches/release/boost/spirit/home/qi/char/meta_grammar.hpp | 10
   branches/release/boost/spirit/home/qi/nonterminal/nonterminal.hpp | 2
   branches/release/boost/spirit/home/qi/numeric/meta_grammar.hpp | 4
   branches/release/boost/spirit/home/qi/operator/meta_grammar.hpp | 2
   branches/release/boost/spirit/home/qi/stream/meta_grammar.hpp | 2
   branches/release/boost/spirit/home/qi/string/meta_grammar.hpp | 4
   branches/release/boost/spirit/home/qi/string/symbols.hpp | 12
   branches/release/boost/spirit/home/support/ascii.hpp | 2
   branches/release/boost/spirit/home/support/auxiliary/functor_holder.hpp | 2
   branches/release/boost/spirit/home/support/component.hpp | 44 +-
   branches/release/boost/spirit/home/support/iso8859_1.hpp | 2
   branches/release/boost/spirit/home/support/meta_grammar/basic_rules.hpp | 4
   branches/release/boost/spirit/home/support/meta_grammar/basic_transforms.hpp | 656 ++++++++++++++++++---------------------
   branches/release/boost/spirit/home/support/nonterminal/nonterminal.hpp | 2
   branches/release/boost/spirit/home/support/placeholders.hpp | 2
   branches/release/boost/spirit/home/support/standard.hpp | 2
   branches/release/boost/spirit/home/support/standard_wide.hpp | 2
   38 files changed, 414 insertions(+), 444 deletions(-)

Modified: branches/release/boost/spirit/home/karma/action/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/action/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/karma/action/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -35,7 +35,7 @@
     struct action_meta_grammar :
         meta_grammar::binary_rule<
             karma::domain, proto::tag::subscript, action,
- main_meta_grammar, proto::when<proto::_, proto::_arg>
+ main_meta_grammar, proto::when<proto::_, proto::_child>
>
     {
     };

Modified: branches/release/boost/spirit/home/karma/auxiliary/confix.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/auxiliary/confix.hpp (original)
+++ branches/release/boost/spirit/home/karma/auxiliary/confix.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -76,7 +76,7 @@
             // generate the prefix
             generate_helper(sink, ctx, d,
                 spirit::detail::confix_extractor::prefix(
- proto::arg_c<0>(spirit::argument1(component))));
+ proto::child_c<0>(spirit::argument1(component))));
 
             // generate the embedded items
             typedef typename
@@ -88,7 +88,7 @@
             // append the suffix
             generate_helper(sink, ctx, d,
                 spirit::detail::confix_extractor::suffix(
- proto::arg_c<0>(spirit::argument1(component))));
+ proto::child_c<0>(spirit::argument1(component))));
 
             return result;
         }
@@ -99,11 +99,11 @@
             std::string result = "confix(";
 
             result += what_helper(spirit::detail::confix_extractor::prefix(
- proto::arg_c<0>(spirit::argument1(component))), ctx);
+ proto::child_c<0>(spirit::argument1(component))), ctx);
             result += ", ";
 
             result += what_helper(spirit::detail::confix_extractor::suffix(
- proto::arg_c<0>(spirit::argument1(component))), ctx);
+ proto::child_c<0>(spirit::argument1(component))), ctx);
             result += ")[";
 
             typedef typename

Modified: branches/release/boost/spirit/home/karma/binary/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/binary/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/karma/binary/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -199,7 +199,7 @@
     struct int_binary_meta_grammar
       : meta_grammar::compose_empty<
             proto::if_<
- is_int_lit_tag<proto::_arg, karma::domain>()
+ is_int_lit_tag<proto::_child, karma::domain>()
>,
             karma::domain,
             mpl::identity<extract_literal_bin_director<mpl::_> >
@@ -211,7 +211,7 @@
       : proto::or_<
             meta_grammar::compose_empty<
                 proto::if_<
- is_binary_tag<proto::_arg, karma::domain>()
+ is_binary_tag<proto::_child, karma::domain>()
>,
                 karma::domain,
                 mpl::identity<extract_binary_director<mpl::_> >
@@ -219,7 +219,7 @@
             meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_binary_tag<proto::_arg, karma::domain>()
+ is_binary_tag<proto::_child, karma::domain>()
>,
                     int_binary_meta_grammar
>,

Modified: branches/release/boost/spirit/home/karma/char/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/char/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/karma/char/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -163,7 +163,7 @@
             // char_, wchar, space
             meta_grammar::compose_empty<
                 proto::if_<
- is_char_tag<proto::_arg, karma::domain>()
+ is_char_tag<proto::_child, karma::domain>()
>,
                 karma::domain,
                 mpl::identity<extract_any_char_director<mpl::_> >
@@ -172,7 +172,7 @@
             meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_char_tag<proto::_arg, karma::domain>()
+ is_char_tag<proto::_child, karma::domain>()
>,
                     basic_char_literal_meta_grammar
>,
@@ -183,7 +183,7 @@
             meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_lit_tag<proto::_arg, karma::domain>()
+ is_lit_tag<proto::_child, karma::domain>()
>,
                     basic_char_literal_meta_grammar
>,

Modified: branches/release/boost/spirit/home/karma/directive/center_alignment.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/directive/center_alignment.hpp (original)
+++ branches/release/boost/spirit/home/karma/directive/center_alignment.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -96,7 +96,7 @@
             Context& ctx, Delimiter const& d, Parameter const& param)
         {
             return detail::center_generate(sink, ctx, d, param,
- subject(component), proto::arg_c<0>(argument1(component)), ' ');
+ subject(component), proto::child_c<0>(argument1(component)), ' ');
         }
 
         template <typename Component, typename Context>
@@ -105,7 +105,7 @@
             std::string result = "center(";
 
             result += boost::lexical_cast<std::string>(
- proto::arg_c<0>(argument1(component)));
+ proto::child_c<0>(argument1(component)));
             result += ")[";
 
             typedef typename
@@ -194,7 +194,7 @@
             Context& ctx, Delimiter const& d, Parameter const& param)
         {
             return detail::center_generate(sink, ctx, d, param,
- subject(component), proto::arg_c<0>(argument1(component)),
+ subject(component), proto::child_c<0>(argument1(component)),
                 argument2(component));
         }
 
@@ -204,7 +204,7 @@
             std::string result = "center(";
 
             result += boost::lexical_cast<std::string>(
- proto::arg_c<0>(argument1(component)));
+ proto::child_c<0>(argument1(component)));
             result += ", ";
 
             typedef typename

Modified: branches/release/boost/spirit/home/karma/directive/left_alignment.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/directive/left_alignment.hpp (original)
+++ branches/release/boost/spirit/home/karma/directive/left_alignment.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -95,7 +95,7 @@
             Context& ctx, Delimiter const& d, Parameter const& param)
         {
             return detail::left_align_generate(sink, ctx, d, param,
- subject(component), proto::arg_c<0>(argument1(component)), ' ');
+ subject(component), proto::child_c<0>(argument1(component)), ' ');
         }
 
         template <typename Component, typename Context>
@@ -104,7 +104,7 @@
             std::string result = "left_align(";
 
             result += boost::lexical_cast<std::string>(
- proto::arg_c<0>(argument1(component)));
+ proto::child_c<0>(argument1(component)));
             result += ")[";
 
             typedef typename
@@ -193,7 +193,7 @@
             Context& ctx, Delimiter const& d, Parameter const& param)
         {
             return detail::left_align_generate(sink, ctx, d, param,
- subject(component), proto::arg_c<0>(argument1(component)),
+ subject(component), proto::child_c<0>(argument1(component)),
                 argument2(component));
         }
 
@@ -203,7 +203,7 @@
             std::string result = "left_align(";
 
             result += boost::lexical_cast<std::string>(
- proto::arg_c<0>(argument1(component)));
+ proto::child_c<0>(argument1(component)));
             result += ", ";
 
             typedef typename

Modified: branches/release/boost/spirit/home/karma/directive/right_alignment.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/directive/right_alignment.hpp (original)
+++ branches/release/boost/spirit/home/karma/directive/right_alignment.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -96,7 +96,7 @@
             Context& ctx, Delimiter const& d, Parameter const& param)
         {
             return detail::right_align_generate(sink, ctx, d, param,
- subject(component), proto::arg_c<0>(argument1(component)), ' ');
+ subject(component), proto::child_c<0>(argument1(component)), ' ');
         }
 
         template <typename Component, typename Context>
@@ -105,7 +105,7 @@
             std::string result = "right_align(";
 
             result += boost::lexical_cast<std::string>(
- proto::arg_c<0>(argument1(component)));
+ proto::child_c<0>(argument1(component)));
             result += ")[";
 
             typedef typename
@@ -194,7 +194,7 @@
             Context& ctx, Delimiter const& d, Parameter const& param)
         {
             return detail::right_align_generate(sink, ctx, d, param,
- subject(component), proto::arg_c<0>(argument1(component)),
+ subject(component), proto::child_c<0>(argument1(component)),
                 argument2(component));
         }
 
@@ -204,7 +204,7 @@
             std::string result = "right_align(";
 
             result += boost::lexical_cast<std::string>(
- proto::arg_c<0>(argument1(component)));
+ proto::child_c<0>(argument1(component)));
             result += ", ";
 
             typedef typename

Modified: branches/release/boost/spirit/home/karma/nonterminal/nonterminal.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/nonterminal/nonterminal.hpp (original)
+++ branches/release/boost/spirit/home/karma/nonterminal/nonterminal.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -15,7 +15,7 @@
 #include <boost/spirit/home/support/nonterminal/locals.hpp>
 #include <boost/spirit/home/support/argument.hpp>
 
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 #include <boost/function_types/result_type.hpp>
 #include <boost/function_types/parameter_types.hpp>
 #include <boost/function_types/is_function.hpp>

Modified: branches/release/boost/spirit/home/karma/numeric/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/numeric/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/karma/numeric/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -359,7 +359,7 @@
     struct int_literal_meta_grammar
       : meta_grammar::compose_empty<
             proto::if_<
- is_int_lit_tag<proto::_arg, karma::domain>()
+ is_int_lit_tag<proto::_child, karma::domain>()
>,
             karma::domain,
             mpl::identity<extract_literal_int_director<mpl::_> >
@@ -372,7 +372,7 @@
       : proto::or_<
             meta_grammar::compose_empty<
                 proto::if_<
- is_int_tag<proto::_arg, karma::domain>()
+ is_int_tag<proto::_child, karma::domain>()
>,
                 karma::domain,
                 mpl::identity<extract_int_director_plain<mpl::_> >
@@ -380,7 +380,7 @@
             meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_int_tag<proto::_arg, karma::domain>()
+ is_int_tag<proto::_child, karma::domain>()
>,
                     int_literal_meta_grammar
>,
@@ -394,7 +394,7 @@
     struct real_literal_meta_grammar
       : meta_grammar::compose_empty<
             proto::if_<
- is_real_lit_tag<proto::_arg, karma::domain>()
+ is_real_lit_tag<proto::_child, karma::domain>()
>,
             karma::domain,
             mpl::identity<extract_literal_real_director<mpl::_> >
@@ -405,7 +405,7 @@
       : proto::or_<
             meta_grammar::compose_single<
                 proto::if_<
- is_real_tag<proto::_arg, karma::domain>()
+ is_real_tag<proto::_child, karma::domain>()
>,
                 karma::domain,
                 mpl::identity<extract_real_director_plain<mpl::_> >
@@ -413,7 +413,7 @@
             meta_grammar::compose_function1_full<
                 proto::function<
                     proto::if_<
- is_real_tag<proto::_arg, karma::domain>()
+ is_real_tag<proto::_child, karma::domain>()
>,
                     real_literal_meta_grammar
>,

Modified: branches/release/boost/spirit/home/karma/operator/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/operator/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/karma/operator/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -70,7 +70,7 @@
                 main_meta_grammar
>,
             meta_grammar::unary_rule<
- karma::domain, proto::tag::posit, plus,
+ karma::domain, proto::tag::unary_plus, plus,
                 main_meta_grammar
>,
             meta_grammar::binary_rule<

Modified: branches/release/boost/spirit/home/karma/stream/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/stream/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/karma/stream/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -75,7 +75,7 @@
             // stream, wstream
             meta_grammar::compose_empty<
                 proto::if_<
- is_stream_tag<proto::_arg, karma::domain>()
+ is_stream_tag<proto::_child, karma::domain>()
>,
                 karma::domain,
                 mpl::identity<extract_any_stream_director<mpl::_> >
@@ -84,7 +84,7 @@
             meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_stream_tag<proto::_arg, karma::domain>()
+ is_stream_tag<proto::_child, karma::domain>()
>,
                     proto::_
>,

Modified: branches/release/boost/spirit/home/karma/string/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/string/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/karma/string/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -185,7 +185,7 @@
             std_string_meta_grammar,
             meta_grammar::compose_empty<
                 proto::if_<
- is_lit_tag<proto::_arg, karma::domain>()
+ is_lit_tag<proto::_child, karma::domain>()
>,
                 karma::domain,
                 mpl::identity<extract_lit_director_plain<mpl::_> >
@@ -193,7 +193,7 @@
             meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_lit_tag<proto::_arg, karma::domain>()
+ is_lit_tag<proto::_child, karma::domain>()
>,
                     proto::or_<
                         basic_string_literal_meta_grammar,
@@ -206,7 +206,7 @@
             meta_grammar::function1_rule<
                 karma::domain, tag::lit, lazy_string,
                 proto::if_<
- detail::is_not_convertible_to_int<proto::_arg>()
+ detail::is_not_convertible_to_int<proto::_child>()
>
>
>

Modified: branches/release/boost/spirit/home/lex/lexer/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/lex/lexer/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/lex/lexer/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -94,11 +94,11 @@
             // semantic actions for tokens
             meta_grammar::binary_rule<
                 lex::domain, proto::tag::subscript, action,
- token_def_meta_grammar, proto::when<proto::_, proto::_arg>
+ token_def_meta_grammar, proto::when<proto::_, proto::_child>
>,
             meta_grammar::binary_rule<
                 lex::domain, proto::tag::subscript, action,
- action_lexer_meta_grammar, proto::when<proto::_, proto::_arg>
+ action_lexer_meta_grammar, proto::when<proto::_, proto::_child>
>
>
     {

Modified: branches/release/boost/spirit/home/lex/lexer/terminal_holder.hpp
==============================================================================
--- branches/release/boost/spirit/home/lex/lexer/terminal_holder.hpp (original)
+++ branches/release/boost/spirit/home/lex/lexer/terminal_holder.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -7,7 +7,7 @@
 #if !defined(BOOST_SPIRIT_LEX_TERMINAL_HOLDER_MAR_22_2007_0217PM)
 #define BOOST_SPIRIT_LEX_TERMINAL_HOLDER_MAR_22_2007_0217PM
 
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 
 namespace boost { namespace spirit { namespace lex
 {

Modified: branches/release/boost/spirit/home/lex/qi/state/in_state.hpp
==============================================================================
--- branches/release/boost/spirit/home/lex/qi/state/in_state.hpp (original)
+++ branches/release/boost/spirit/home/lex/qi/state/in_state.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -10,7 +10,7 @@
 #pragma once // MS compatible compilers support #pragma once
 #endif
 
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 
 ///////////////////////////////////////////////////////////////////////////////
 namespace boost { namespace spirit { namespace qi

Modified: branches/release/boost/spirit/home/lex/qi/state/state_switcher.hpp
==============================================================================
--- branches/release/boost/spirit/home/lex/qi/state/state_switcher.hpp (original)
+++ branches/release/boost/spirit/home/lex/qi/state/state_switcher.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -142,7 +142,7 @@
 
             // the state has to be reset at exit in any case
             detail::reset_state_on_exit<Iterator> guard(
- first, proto::arg_c<0>(argument1(component)).name);
+ first, proto::child_c<0>(argument1(component)).name);
 
             return director::parse(spirit::subject(component), first,
                 last, context, skipper, attr);
@@ -153,7 +153,7 @@
         {
             std::string result("in_state(\"");
             result += spirit::detail::to_narrow_string(
- proto::arg_c<0>(argument1(component)).name);
+ proto::child_c<0>(argument1(component)).name);
             result += "\")[";
 
             typedef typename

Modified: branches/release/boost/spirit/home/lex/qi/utility/plain_token.hpp
==============================================================================
--- branches/release/boost/spirit/home/lex/qi/utility/plain_token.hpp (original)
+++ branches/release/boost/spirit/home/lex/qi/utility/plain_token.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -11,7 +11,7 @@
 #endif
 
 #include <boost/lexical_cast.hpp>
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 #include <boost/range/iterator_range.hpp>
 
 namespace boost { namespace spirit { namespace qi

Modified: branches/release/boost/spirit/home/lex/set_state.hpp
==============================================================================
--- branches/release/boost/spirit/home/lex/set_state.hpp (original)
+++ branches/release/boost/spirit/home/lex/set_state.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -10,7 +10,7 @@
 #pragma once // MS compatible compilers support #pragma once
 #endif
 
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 
 ///////////////////////////////////////////////////////////////////////////////
 namespace boost { namespace spirit

Modified: branches/release/boost/spirit/home/qi/action/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/action/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/qi/action/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -31,7 +31,7 @@
     struct action_meta_grammar :
         meta_grammar::binary_rule<
             qi::domain, proto::tag::subscript, action
- , main_meta_grammar, proto::when<proto::_, proto::_arg>
+ , main_meta_grammar, proto::when<proto::_, proto::_child>
>
     {
     };

Modified: branches/release/boost/spirit/home/qi/auxiliary/confix.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/auxiliary/confix.hpp (original)
+++ branches/release/boost/spirit/home/qi/auxiliary/confix.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -82,7 +82,7 @@
             // parse the prefix
             parse_helper(first, last, context, skipper,
                 spirit::detail::confix_extractor::prefix(
- proto::arg_c<0>(spirit::argument1(component))));
+ proto::child_c<0>(spirit::argument1(component))));
 
             // generate the embedded items
             typedef typename
@@ -94,7 +94,7 @@
             // append the suffix
             parse_helper(first, last, context, skipper,
                 spirit::detail::confix_extractor::suffix(
- proto::arg_c<0>(spirit::argument1(component))));
+ proto::child_c<0>(spirit::argument1(component))));
 
             return result;
         }
@@ -105,11 +105,11 @@
             std::string result = "confix(";
 
             result += what_helper(spirit::detail::confix_extractor::prefix(
- proto::arg_c<0>(spirit::argument1(component))), ctx);
+ proto::child_c<0>(spirit::argument1(component))), ctx);
             result += ", ";
 
             result += what_helper(spirit::detail::confix_extractor::suffix(
- proto::arg_c<0>(spirit::argument1(component))), ctx);
+ proto::child_c<0>(spirit::argument1(component))), ctx);
             result += ")[";
 
             typedef typename

Modified: branches/release/boost/spirit/home/qi/binary/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/binary/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/qi/binary/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -197,7 +197,7 @@
     struct int_binary_meta_grammar
       : meta_grammar::compose_empty<
             proto::if_<
- is_int_lit_tag<proto::_arg, qi::domain>()
+ is_int_lit_tag<proto::_child, qi::domain>()
>,
             qi::domain,
             mpl::identity<extract_literal_bin_director<mpl::_> >
@@ -209,7 +209,7 @@
       : proto::or_<
             meta_grammar::compose_empty<
                 proto::if_<
- is_binary_tag<proto::_arg, qi::domain>()
+ is_binary_tag<proto::_child, qi::domain>()
>,
                 qi::domain,
                 mpl::identity<extract_binary_director<mpl::_> >
@@ -217,7 +217,7 @@
             meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_binary_tag<proto::_arg, qi::domain>()
+ is_binary_tag<proto::_child, qi::domain>()
>,
                     int_binary_meta_grammar
>,

Modified: branches/release/boost/spirit/home/qi/char/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/char/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/qi/char/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -263,7 +263,7 @@
             // char_, wchar --> any_char
             meta_grammar::compose_empty<
                 proto::if_<
- is_char_tag<proto::_arg, qi::domain>()
+ is_char_tag<proto::_child, qi::domain>()
>
               , qi::domain
               , mpl::identity<extract_any_char_director<mpl::_> >
@@ -272,7 +272,7 @@
           , meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_char_tag<proto::_arg, qi::domain>()
+ is_char_tag<proto::_child, qi::domain>()
>
                   , single_char_literal_meta_grammar
>
@@ -283,7 +283,7 @@
           , meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_lit_tag<proto::_arg, qi::domain>()
+ is_lit_tag<proto::_child, qi::domain>()
>
                   , basic_char_literal_meta_grammar
>
@@ -294,7 +294,7 @@
           , meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_char_tag<proto::_arg, qi::domain>()>
+ is_char_tag<proto::_child, qi::domain>()>
                   , proto::or_<basic_string_literal_meta_grammar, basic_std_string_meta_grammar>
>
               , qi::domain
@@ -310,7 +310,7 @@
           , meta_grammar::compose_function2_eval<
                 proto::function<
                     proto::if_<
- is_char_tag<proto::_arg, qi::domain>()
+ is_char_tag<proto::_child, qi::domain>()
>
                   , basic_char_literal_meta_grammar
                   , basic_char_literal_meta_grammar

Modified: branches/release/boost/spirit/home/qi/nonterminal/nonterminal.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/nonterminal/nonterminal.hpp (original)
+++ branches/release/boost/spirit/home/qi/nonterminal/nonterminal.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -11,7 +11,7 @@
 #include <boost/spirit/home/support/nonterminal/locals.hpp>
 #include <boost/spirit/home/support/argument.hpp>
 
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 #include <boost/function_types/result_type.hpp>
 #include <boost/function_types/parameter_types.hpp>
 #include <boost/function_types/is_function.hpp>

Modified: branches/release/boost/spirit/home/qi/numeric/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/numeric/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/qi/numeric/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -271,7 +271,7 @@
     ///////////////////////////////////////////////////////////////////////////
     struct int_meta_grammar
       : meta_grammar::compose_empty<
- proto::if_<is_int_tag<proto::_arg, qi::domain>()>
+ proto::if_<is_int_tag<proto::_child, qi::domain>()>
           , qi::domain
           , mpl::identity<extract_int_director<mpl::_> >
>
@@ -279,7 +279,7 @@
 
     struct real_meta_grammar
       : meta_grammar::compose_single<
- proto::if_<is_real_tag<proto::_arg, qi::domain>()>
+ proto::if_<is_real_tag<proto::_child, qi::domain>()>
           , qi::domain
           , mpl::identity<extract_real_director<mpl::_> >
>

Modified: branches/release/boost/spirit/home/qi/operator/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/operator/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/qi/operator/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -99,7 +99,7 @@
>
             // +a
           , meta_grammar::unary_rule<
- qi::domain, proto::tag::posit, plus
+ qi::domain, proto::tag::unary_plus, plus
               , main_meta_grammar
>
             // &a

Modified: branches/release/boost/spirit/home/qi/stream/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/stream/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/qi/stream/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -95,7 +95,7 @@
         // stream, wstream
         meta_grammar::compose_empty<
             proto::if_<
- is_stream_tag<proto::_arg, qi::domain>()
+ is_stream_tag<proto::_child, qi::domain>()
>,
             qi::domain,
             mpl::identity<extract_stream_director<mpl::_> >

Modified: branches/release/boost/spirit/home/qi/string/meta_grammar.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/string/meta_grammar.hpp (original)
+++ branches/release/boost/spirit/home/qi/string/meta_grammar.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -159,7 +159,7 @@
           , meta_grammar::compose_function1_eval<
                 proto::function<
                     proto::if_<
- is_lit_tag<proto::_arg, qi::domain>()>
+ is_lit_tag<proto::_child, qi::domain>()>
                   , proto::or_<basic_string_literal_meta_grammar, basic_std_string_meta_grammar>
>
               , qi::domain
@@ -170,7 +170,7 @@
               , tag::lit
               , lazy_string
               , proto::if_<
- detail::is_not_convertible_to_int<proto::_arg >() >
+ detail::is_not_convertible_to_int<proto::_child >() >
>
           , meta_grammar::terminal_rule<
                 qi::domain

Modified: branches/release/boost/spirit/home/qi/string/symbols.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/string/symbols.hpp (original)
+++ branches/release/boost/spirit/home/qi/string/symbols.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -13,7 +13,7 @@
 #include <boost/spirit/home/support/modifier.hpp>
 #include <boost/spirit/home/qi/detail/assign_to.hpp>
 #include <boost/fusion/include/at.hpp>
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 #include <boost/shared_ptr.hpp>
 #include <boost/range.hpp>
 #include <boost/type_traits/add_reference.hpp>
@@ -92,7 +92,7 @@
           : add(*this)
           , remove(*this)
         {
- proto::arg(*this).lookup = ptr_type(new Lookup());
+ proto::child(*this).lookup = ptr_type(new Lookup());
         }
 
         template <typename Symbols>
@@ -100,7 +100,7 @@
           : add(*this)
           , remove(*this)
         {
- proto::arg(*this).lookup = ptr_type(new Lookup());
+ proto::child(*this).lookup = ptr_type(new Lookup());
             typename range_const_iterator<Symbols>::type si = boost::begin(syms);
             while (si != boost::end(syms))
                 add(*si++);
@@ -111,7 +111,7 @@
           : add(*this)
           , remove(*this)
         {
- proto::arg(*this).lookup = ptr_type(new Lookup());
+ proto::child(*this).lookup = ptr_type(new Lookup());
             typename range_const_iterator<Symbols>::type si = boost::begin(syms);
             typename range_const_iterator<Data>::type di = boost::begin(data);
             while (si != boost::end(syms))
@@ -121,7 +121,7 @@
         symbols&
         operator=(symbols const& rhs)
         {
- proto::arg(*this) = proto::arg(rhs);
+ proto::child(*this) = proto::child(rhs);
             return *this;
         }
 
@@ -154,7 +154,7 @@
 
         ptr_type lookup() const
         {
- return proto::arg(*this).lookup;
+ return proto::child(*this).lookup;
         }
 
         template <typename F>

Modified: branches/release/boost/spirit/home/support/ascii.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/ascii.hpp (original)
+++ branches/release/boost/spirit/home/support/ascii.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -8,7 +8,7 @@
 #define SPIRIT_ASCII_JAN_31_2006_0529PM
 
 #include <boost/spirit/home/support/char_class.hpp>
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 
 namespace boost { namespace spirit { namespace ascii
 {

Modified: branches/release/boost/spirit/home/support/auxiliary/functor_holder.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/auxiliary/functor_holder.hpp (original)
+++ branches/release/boost/spirit/home/support/auxiliary/functor_holder.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -10,7 +10,7 @@
 #pragma once // MS compatible compilers support #pragma once
 #endif
 
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 
 namespace boost { namespace spirit
 {

Modified: branches/release/boost/spirit/home/support/component.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/component.hpp (original)
+++ branches/release/boost/spirit/home/support/component.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -9,7 +9,7 @@
 
 #include <boost/spirit/home/support/unused.hpp>
 #include <boost/spirit/home/support/meta_grammar/grammar.hpp>
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 #include <boost/fusion/include/at.hpp>
 #include <boost/fusion/include/value_at.hpp>
 #include <boost/mpl/void.hpp>
@@ -198,12 +198,8 @@
         {
             typedef typename meta_grammar::grammar<Domain>::type grammar;
             typedef typename proto::result_of::as_expr<Expr>::type proto_xpr;
-
- typedef typename
- grammar::template result<
- void(proto_xpr, State, Visitor)
- >::type
- type;
+ typedef typename grammar::template impl<proto_xpr, State, Visitor> callable;
+ typedef typename callable::result_type type;
         };
 
         // special case for arrays
@@ -214,12 +210,8 @@
         {
             typedef typename meta_grammar::grammar<Domain>::type grammar;
             typedef typename proto::result_of::as_expr<T const*>::type proto_xpr;
-
- typedef typename
- grammar::template result<
- void(proto_xpr, State, Visitor)
- >::type
- type;
+ typedef typename grammar::template impl<proto_xpr, State, Visitor> callable;
+ typedef typename callable::result_type type;
         };
 
         // special case for components
@@ -229,24 +221,36 @@
         {
         };
     }
+
+ namespace detail
+ {
+ template<typename T>
+ T &decay(T &t)
+ {
+ return t;
+ }
+
+ template<typename T, int N>
+ T *decay(T (&t)[N])
+ {
+ return t;
+ }
+ }
 
     template <typename Domain, typename Expr>
     inline typename result_of::as_component<Domain, Expr>::type
     as_component(Domain, Expr const& xpr)
     {
- unused_type unused;
- typedef typename result_of::as_component<Domain, Expr>::grammar grammar;
- return grammar()(proto::as_expr(xpr), unused, unused);
+ typedef typename result_of::as_component<Domain, Expr>::callable callable;
+ return callable()(proto::as_expr(detail::decay(xpr)), unused_type(), unused_type());
     }
 
     template <typename Domain, typename Expr, typename State, typename Visitor>
     inline typename result_of::as_component<Domain, Expr>::type
     as_component(Domain, Expr const& xpr, State const& state, Visitor& visitor)
     {
- typedef typename
- result_of::as_component<Domain, Expr, State, Visitor>::grammar
- grammar;
- return grammar()(proto::as_expr(xpr), state, visitor);
+ typedef typename result_of::as_component<Domain, Expr, State, Visitor>::callable callable;
+ return callable()(proto::as_expr(detail::decay(xpr)), state, visitor);
     }
 
     template <typename Domain, typename Director, typename Elements>

Modified: branches/release/boost/spirit/home/support/iso8859_1.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/iso8859_1.hpp (original)
+++ branches/release/boost/spirit/home/support/iso8859_1.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -8,7 +8,7 @@
 #define SPIRIT_ISO8859_1_JAN_31_2006_0529PM
 
 #include <boost/spirit/home/support/char_class.hpp>
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 
 namespace boost { namespace spirit { namespace iso8859_1
 {

Modified: branches/release/boost/spirit/home/support/meta_grammar/basic_rules.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/meta_grammar/basic_rules.hpp (original)
+++ branches/release/boost/spirit/home/support/meta_grammar/basic_rules.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -11,8 +11,8 @@
 #include <boost/spirit/home/support/meta_grammar/basic_transforms.hpp>
 #include <boost/spirit/home/support/component.hpp>
 #include <boost/fusion/include/cons.hpp>
-#include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform.hpp>
+#include <boost/proto/core.hpp>
+#include <boost/proto/transform.hpp>
 #include <boost/mpl/identity.hpp>
 
 namespace boost { namespace spirit { namespace meta_grammar

Modified: branches/release/boost/spirit/home/support/meta_grammar/basic_transforms.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/meta_grammar/basic_transforms.hpp (original)
+++ branches/release/boost/spirit/home/support/meta_grammar/basic_transforms.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -12,8 +12,8 @@
 #include <boost/spirit/home/support/component.hpp>
 #include <boost/spirit/home/support/modifier.hpp>
 
-#include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform.hpp>
+#include <boost/proto/core.hpp>
+#include <boost/proto/transform.hpp>
 
 #include <boost/fusion/include/cons.hpp>
 #include <boost/fusion/include/list.hpp>
@@ -25,6 +25,21 @@
 namespace boost { namespace spirit { namespace meta_grammar
 {
     ///////////////////////////////////////////////////////////////////////////
+ // Invoke the specified grammar in the "Proto v2" way, dropping top
+ // level const and reference on the three parameters
+ //template<typename Grammar, typename Expr, typename State, typename Data>
+ //typename Grammar::template impl<Expr, State, Data>::result_type
+ //invoke_grammar(Expr const &expr, State const &state, Data &data)
+ //{
+ // return typename Grammar::template impl<Expr, State, Data>()(expr, state, data);
+ //}
+
+ template<typename Grammar, typename Expr, typename State, typename Data>
+ struct invoke_grammar
+ : Grammar::template impl<Expr, State, Data>
+ {};
+
+ ///////////////////////////////////////////////////////////////////////////
     // A proto transform for creating empty component meta descriptions
     // (proto expressions) usable for defining meta grammars. Additionally,
     // this is used to make the corresponding spirit component.
@@ -37,35 +52,33 @@
     // domain (i.e.: any_char)
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename DirectorF>
- struct compose_empty : Grammar
+ struct compose_empty : proto::transform<compose_empty<Grammar, Domain, DirectorF> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
- typedef typename proto::result_of::arg<Expr>::type arg_type;
+ typedef typename proto::result_of::child<Expr>::type arg_type;
 
             typedef
                 traits::make_component<
                     Domain
                   , typename mpl::apply1<DirectorF, arg_type>::type
                   , fusion::nil
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const&, State const&, Visitor&) const
- {
- typedef typename result<void(Expr, State, Visitor)>::make_component result;
- return result::call(fusion::nil());
- }
+ result_type operator ()(
+ typename impl::expr_param
+ , typename impl::state_param
+ , typename impl::data_param
+ ) const
+ {
+ return make_component::call(fusion::nil());
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -80,43 +93,41 @@
     // domain (i.e.: negated_char_parser<...>)
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename DirectorF>
- struct compose_single : Grammar
+ struct compose_single : proto::transform<compose_single<Grammar, Domain, DirectorF> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
- proto::result_of::arg<
- typename Grammar::template result<void(Expr, State, Visitor)>::type
+ proto::result_of::child<
+ typename Grammar::template impl<Expr, State, Data>::result_type
>::type
             arg_type;
-
+
             typedef
                 traits::make_component<
                     Domain
                   , typename mpl::apply1<DirectorF, arg_type>::type
                   , typename fusion::result_of::make_cons<arg_type>::type
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& state, Visitor& visitor) const
- {
- typedef typename result<void(Expr, State, Visitor)>::make_component result;
- return result::call(
- fusion::make_cons(
- proto::arg(Grammar()(expr, state, visitor))
- )
- );
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ return make_component::call(
+ fusion::make_cons(
+ proto::child(invoke_grammar<Grammar, Expr, State, Data>()(expr, state, data))
+ )
+ );
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -131,16 +142,13 @@
     // domain (i.e.: difference)
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename DirectorF>
- struct compose_double : Grammar
+ struct compose_double : proto::transform<compose_double<Grammar, Domain, DirectorF> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
- Grammar::template result<void(Expr, State, Visitor)>::type
+ Grammar::template impl<Expr, State, Data>::result_type
             trans;
 
             typedef typename proto::result_of::left<trans>::type left_type;
@@ -154,26 +162,24 @@
                     Domain
                   , typename mpl::apply1<DirectorF, list_type>::type
                   , list_type
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& state, Visitor& visitor) const
- {
- typedef result<void(Expr, State, Visitor)> apply;
- typedef typename apply::make_component result;
- typedef typename apply::list_type list_type;
-
- typename apply::trans trans = Grammar()(expr, state, visitor);
- return result::call(
- fusion::make_list(proto::left(trans), proto::right(trans))
- );
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ trans t = invoke_grammar<Grammar, Expr, State, Data>()(expr, state, data);
+ return make_component::call(
+ fusion::make_list(proto::left(t), proto::right(t))
+ );
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -189,21 +195,18 @@
     ///////////////////////////////////////////////////////////////////////////
 
     template <typename Grammar, typename Domain, typename DirectorF>
- struct compose_triple : Grammar
+ struct compose_triple : proto::transform<compose_triple<Grammar, Domain, DirectorF> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
- Grammar::template result<void(Expr, State, Visitor)>::type
+ Grammar::template impl<Expr, State, Data>::result_type
             trans;
 
- typedef typename proto::result_of::arg_c<trans, 0>::type arg0_type;
- typedef typename proto::result_of::arg_c<trans, 1>::type arg1_type;
- typedef typename proto::result_of::arg_c<trans, 2>::type arg2_type;
+ typedef typename proto::result_of::child_c<trans, 0>::type arg0_type;
+ typedef typename proto::result_of::child_c<trans, 1>::type arg1_type;
+ typedef typename proto::result_of::child_c<trans, 2>::type arg2_type;
 
             typedef typename
                 fusion::result_of::make_list<arg0_type, arg1_type, arg2_type>::type
@@ -214,26 +217,24 @@
                     Domain
                   , typename mpl::apply1<DirectorF, list_type>::type
                   , list_type
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& state, Visitor& visitor) const
- {
- typedef result<void(Expr, State, Visitor)> apply;
- typedef typename apply::make_component result;
- typedef typename apply::list_type list_type;
-
- typename apply::trans trans = Grammar()(expr, state, visitor);
- return result::call(
- fusion::make_list(proto::arg_c<0>(trans), proto::arg_c<1>(trans), proto::arg_c<2>(trans))
- );
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ trans t = invoke_grammar<Grammar, Expr, State, Data>()(expr, state, data);
+ return make_component::call(
+ fusion::make_list(proto::child_c<0>(t), proto::child_c<1>(t), proto::child_c<2>(t))
+ );
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -249,16 +250,13 @@
     // domain (i.e.: difference)
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename DirectorF>
- struct compose_right : Grammar
+ struct compose_right : proto::transform<compose_right<Grammar, Domain, DirectorF> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
- Grammar::template result<void(Expr, State, Visitor)>::type
+ Grammar::template impl<Expr, State, Data>::result_type
             trans;
 
             typedef typename proto::result_of::right<trans>::type right_type;
@@ -271,26 +269,24 @@
                     Domain
                   , typename mpl::apply1<DirectorF, list_type>::type
                   , list_type
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& state, Visitor& visitor) const
- {
- typedef result<void(Expr, State, Visitor)> apply;
- typedef typename apply::make_component result;
- typedef typename apply::list_type list_type;
-
- typename apply::trans trans = Grammar()(expr, state, visitor);
- return result::call(
- fusion::make_list(proto::right(trans))
- );
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ trans t = invoke_grammar<Grammar, Expr, State, Data>()(expr, state, data);
+ return make_component::call(
+ fusion::make_list(proto::right(t))
+ );
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -299,7 +295,7 @@
     ///////////////////////////////////////////////////////////////////////////
     template <typename Pred, typename TransformF>
     struct if_transform
- : proto::when<proto::if_<Pred>, proto::bind<TransformF> >
+ : proto::when<proto::if_<Pred>, proto::lazy<TransformF> >
     {
     };
 
@@ -307,33 +303,30 @@
     // A proto transform that composes components from a fusion::list
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename Director>
- struct compose_list : Grammar
+ struct compose_list : proto::transform<compose_list<Grammar, Domain, Director> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef
                 traits::make_component<
                     Domain, Director
- , typename Grammar::template
- result<void(Expr, State, Visitor)>::type
- , Visitor
+ , typename Grammar::template impl<Expr, State, Data>::result_type
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& state, Visitor& visitor) const
- {
- typedef typename result<void(Expr, State, Visitor)>::make_component result;
- return result::call(Grammar()(expr, state, visitor));
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ return make_component::call(invoke_grammar<Grammar, Expr, State, Data>()(expr, state, data));
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -341,17 +334,14 @@
     // from a 1-arity proto function expression (e.g. f(x))
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename Director>
- struct compose_function1 : Grammar
+ struct compose_function1 : proto::transform<compose_function1<Grammar, Domain, Director> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 1>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 1>::type
>::type
             arg1;
 
@@ -359,41 +349,39 @@
                 traits::make_component<
                     Domain, Director
                   , typename fusion::result_of::make_cons<arg1>::type
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const&, Visitor&) const
- {
- typedef typename result<void(Expr, State, Visitor)>::make_component result;
- return result::call(fusion::make_cons(proto::arg(proto::arg_c<1>(expr))));
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ return make_component::call(fusion::make_cons(proto::child(proto::child_c<1>(expr))));
+ }
+ };
     };
 
     // Same as compose_function1, except that DirectorF is a meta-function to
     // be evaluated to get the director
     template <typename Grammar, typename Domain, typename DirectorF>
- struct compose_function1_eval : Grammar
+ struct compose_function1_eval : proto::transform<compose_function1_eval<Grammar, Domain, DirectorF> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 0>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 0>::type
>::type
             function;
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 1>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 1>::type
>::type
             arg1;
 
@@ -402,42 +390,41 @@
                     Domain
                   , typename mpl::apply2<DirectorF, function, arg1>::type
                   , typename fusion::result_of::make_cons<arg1>::type
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const&, Visitor&) const
- {
- typedef typename result<void(Expr, State, Visitor)>::make_component result;
- return result::call(
- fusion::make_cons(proto::arg(proto::arg_c<1>(expr))));
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ return make_component::call(
+ fusion::make_cons(proto::child(proto::child_c<1>(expr))));
+ }
+ };
     };
 
     // Same as compose_function1, except that the generated component holds
     // not only the function argument, but the function tag as well
     template <typename Grammar, typename Domain, typename DirectorF>
- struct compose_function1_full : Grammar
+ struct compose_function1_full : proto::transform<compose_function1_full<Grammar, Domain, DirectorF> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 0>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 0>::type
>::type
             function;
+
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 1>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 1>::type
>::type
             arg1;
 
@@ -446,23 +433,24 @@
                     Domain
                   , typename mpl::apply2<DirectorF, function, arg1>::type
                   , typename fusion::result_of::make_list<function, arg1>::type
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& /*state*/, Visitor& /*visitor*/) const
- {
- typedef typename result<void(Expr, State, Visitor)>::make_component result;
- return result::call(fusion::make_list(
- proto::arg(proto::arg_c<0>(expr)),
- proto::arg(proto::arg_c<1>(expr))
- ));
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param
+ , typename impl::data_param
+ ) const
+ {
+ return make_component::call(fusion::make_list(
+ proto::child(proto::child_c<0>(expr)),
+ proto::child(proto::child_c<1>(expr))
+ ));
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -470,23 +458,20 @@
     // from a 2-arity proto function expression (e.g. f(x, y))
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename Director>
- struct compose_function2 : Grammar
+ struct compose_function2 : proto::transform<compose_function2<Grammar, Domain, Director> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 1>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 1>::type
>::type
             arg1;
 
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 2>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 2>::type
>::type
             arg2;
 
@@ -494,49 +479,49 @@
                 traits::make_component<
                     Domain, Director
                   , typename fusion::result_of::make_list<arg1, arg2>::type
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& /*state*/, Visitor& /*visitor*/) const
- {
- typedef typename result<void(Expr, State, Visitor)>::make_component result;
- return result::call(fusion::make_list(
- proto::arg(proto::arg_c<1>(expr))
- , proto::arg(proto::arg_c<2>(expr))
- ));
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param
+ , typename impl::data_param
+ ) const
+ {
+ return make_component::call(fusion::make_list(
+ proto::child(proto::child_c<1>(expr))
+ , proto::child(proto::child_c<2>(expr))
+ ));
+ }
+ };
     };
 
     // Same as compose_function2, except that DirectorF is a meta-function to
     // be evaluated to get the director
     template <typename Grammar, typename Domain, typename DirectorF>
- struct compose_function2_eval : Grammar
+ struct compose_function2_eval : proto::transform<compose_function2_eval<Grammar, Domain, DirectorF> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 0>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 0>::type
>::type
             function;
+
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 1>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 1>::type
>::type
             arg1;
+
             typedef typename
- proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 2>::type
+ proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 2>::type
>::type
             arg2;
 
@@ -545,65 +530,59 @@
                     Domain
                   , typename mpl::apply2<DirectorF, function, arg1>::type
                   , typename fusion::result_of::make_list<arg1, arg2>::type
- , Visitor
+ , Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& /*state*/, Visitor& /*visitor*/) const
- {
- typedef typename result<void(Expr, State, Visitor)>::make_component result;
- return result::call(fusion::make_list(
- proto::arg(proto::arg_c<1>(expr))
- , proto::arg(proto::arg_c<2>(expr))
- ));
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param
+ , typename impl::data_param
+ ) const
+ {
+ return make_component::call(fusion::make_list(
+ proto::child(proto::child_c<1>(expr))
+ , proto::child(proto::child_c<2>(expr))
+ ));
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
     // A proto transform for directives. The directive (terminal) tag
- // is pushed into the modifier state (the Visitor).
+ // is pushed into the modifier state (the Data).
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar>
- struct compose_deep_directive : Grammar
+ struct compose_deep_directive : proto::transform<compose_deep_directive<Grammar> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             typedef typename
                 add_modifier<
- Visitor
- , typename proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 0>::type
+ Data
+ , typename proto::result_of::child<
+ typename proto::result_of::child_c<Expr, 0>::type
>::type
>::type
             modifier_type;
 
             typedef typename
- Grammar::template result<void(Expr, State, modifier_type)>::type
- type;
- };
+ Grammar::template impl<Expr, State, modifier_type>::result_type
+ result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& state, Visitor&) const
- {
- typename add_modifier<
- Visitor
- , typename proto::result_of::arg<
- typename proto::result_of::arg_c<Expr, 0>::type
- >::type
- >::type
- modifier;
- return Grammar()(expr, state, modifier);
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param
+ ) const
+ {
+ modifier_type modifier;
+ return invoke_grammar<Grammar, Expr, State, modifier_type>()(expr, state, modifier);
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -615,48 +594,43 @@
     //
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename Director>
- struct compose_subscript : Grammar
+ struct compose_subscript : proto::transform<compose_subscript<Grammar, Domain, Director> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             // apply all grammar transformations mandated for the whole
             // expression
             typedef typename
- Grammar::template result<void(Expr, State, Visitor)>::type
+ Grammar::template impl<Expr, State, Data>::result_type
             trans;
 
             // this calculates the type of the directive
- typedef typename proto::result_of::arg_c<trans, 0>::type directive;
+ typedef typename proto::result_of::child_c<trans, 0>::type directive;
             
             // this calculates the type of the embedded expression
- typedef typename proto::result_of::arg_c<trans, 1>::type embedded;
+ typedef typename proto::result_of::child_c<trans, 1>::type embedded;
             
             // this is the type of the contained data
             typedef fusion::list<embedded, directive> list_type;
 
             typedef
- traits::make_component<Domain, Director, list_type, Visitor>
+ traits::make_component<Domain, Director, list_type, Data>
             make_component;
 
- typedef typename make_component::type type;
- };
-
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& state, Visitor& visitor) const
- {
- typedef result<void(Expr, State, Visitor)> apply;
- typedef typename apply::make_component result;
- typedef typename apply::list_type list_type;
- typename apply::trans trans = Grammar()(expr, state, visitor);
+ typedef typename make_component::type result_type;
 
- return result::call(
- list_type(proto::arg_c<1>(trans), proto::arg_c<0>(trans)));
- }
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ trans t = invoke_grammar<Grammar, Expr, State, Data>()(expr, state, data);
+ return make_component::call(
+ list_type(proto::child_c<1>(t), proto::child_c<0>(t)));
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -668,27 +642,24 @@
     //
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename Director>
- struct compose_subscript_function1 : Grammar
+ struct compose_subscript_function1 : proto::transform<compose_subscript_function1<Grammar, Domain, Director> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             // apply all grammar transformations mandated for the whole
             // expression
             typedef typename
- Grammar::template result<void(Expr, State, Visitor)>::type
+ Grammar::template impl<Expr, State, Data>::result_type
             trans;
 
             // this calculates the type of the embedded expression
- typedef typename proto::result_of::arg_c<trans, 1>::type embedded;
+ typedef typename proto::result_of::child_c<trans, 1>::type embedded;
             
             // this calculates the type of the argument of the function
             typedef typename
- proto::result_of::arg_c<
- typename proto::result_of::arg_c<trans, 0>::type, 1
+ proto::result_of::child_c<
+ typename proto::result_of::child_c<trans, 0>::type, 1
>::type
             arg1;
 
@@ -699,26 +670,25 @@
                 traits::make_component<
                     Domain, Director,
                     list_type,
- Visitor
+ Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& state, Visitor& visitor) const
- {
- typedef result<void(Expr, State, Visitor)> apply;
- typedef typename apply::make_component result;
- typedef typename apply::list_type list_type;
- typename apply::trans trans = Grammar()(expr, state, visitor);
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ trans t = invoke_grammar<Grammar, Expr, State, Data>()(expr, state, data);
 
- return result::call(list_type(
- proto::arg_c<1>(trans),
- proto::arg_c<1>(proto::arg_c<0>(trans))));
- }
+ return make_component::call(list_type(
+ proto::child_c<1>(t),
+ proto::child_c<1>(proto::child_c<0>(t))));
+ }
+ };
     };
 
     ///////////////////////////////////////////////////////////////////////////
@@ -730,54 +700,50 @@
     //
     ///////////////////////////////////////////////////////////////////////////
     template <typename Grammar, typename Domain, typename Director>
- struct compose_subscript_function2 : Grammar
+ struct compose_subscript_function2 : proto::transform<compose_subscript_function2<Grammar, Domain, Director> >, Grammar
     {
- template<typename Sig>
- struct result;
-
- template <typename This, typename Expr, typename State, typename Visitor>
- struct result<This(Expr, State, Visitor)>
+ template<typename Expr, typename State, typename Data>
+ struct impl : proto::transform_impl<Expr, State, Data>
         {
             // apply all grammar transformations mandated for the whole
             // expression
             typedef typename
- Grammar::template result<void(Expr, State, Visitor)>::type
+ Grammar::template impl<Expr, State, Data>::result_type
             trans;
 
             // this calculates the types of the arguments of the function
- typedef typename proto::result_of::arg_c<trans, 0>::type arg0;
- typedef typename proto::result_of::arg_c<arg0, 1>::type arg1;
- typedef typename proto::result_of::arg_c<arg0, 2>::type arg2;
+ typedef typename proto::result_of::child_c<trans, 0>::type arg0;
+ typedef typename proto::result_of::child_c<arg0, 1>::type arg1;
+ typedef typename proto::result_of::child_c<arg0, 2>::type arg2;
 
             // this calculates the type of the embedded expression
- typedef typename proto::result_of::arg_c<trans, 1>::type embedded;
+ typedef typename proto::result_of::child_c<trans, 1>::type embedded;
             typedef fusion::list<embedded, arg1, arg2> list_type;
 
             typedef
                 traits::make_component<
                     Domain, Director,
                     list_type,
- Visitor
+ Data
>
             make_component;
 
- typedef typename make_component::type type;
- };
+ typedef typename make_component::type result_type;
 
- template<typename Expr, typename State, typename Visitor>
- typename result<void(Expr, State, Visitor)>::type
- operator ()(Expr const& expr, State const& state, Visitor& visitor) const
- {
- typedef result<void(Expr, State, Visitor)> apply;
- typedef typename apply::make_component result;
- typedef typename apply::list_type list_type;
- typename apply::trans trans = Grammar()(expr, state, visitor);
- typename apply::arg0 arg0 = proto::arg_c<0>(trans);
+ result_type operator ()(
+ typename impl::expr_param expr
+ , typename impl::state_param state
+ , typename impl::data_param data
+ ) const
+ {
+ trans t = invoke_grammar<Grammar, Expr, State, Data>()(expr, state, data);
+ arg0 a0 = proto::child_c<0>(t);
 
- return result::call(list_type(
- proto::arg_c<1>(trans), proto::arg_c<1>(arg0),
- proto::arg_c<2>(arg0)));
- }
+ return make_component::call(list_type(
+ proto::child_c<1>(t), proto::child_c<1>(a0),
+ proto::child_c<2>(a0)));
+ }
+ };
     };
 
 }}}

Modified: branches/release/boost/spirit/home/support/nonterminal/nonterminal.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/nonterminal/nonterminal.hpp (original)
+++ branches/release/boost/spirit/home/support/nonterminal/nonterminal.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -7,7 +7,7 @@
 #if !defined(BOOST_SPIRIT_NONTERMINAL_MAR_06_2007_0236PM)
 #define BOOST_SPIRIT_NONTERMINAL_MAR_06_2007_0236PM
 
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 #include <boost/function_types/result_type.hpp>
 #include <boost/function_types/parameter_types.hpp>
 #include <boost/fusion/include/as_vector.hpp>

Modified: branches/release/boost/spirit/home/support/placeholders.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/placeholders.hpp (original)
+++ branches/release/boost/spirit/home/support/placeholders.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -8,7 +8,7 @@
 #if !defined(BOOST_SPIRIT_PLACEHOLDERS_NOV_18_2006_0326PM)
 #define BOOST_SPIRIT_PLACEHOLDERS_NOV_18_2006_0326PM
 
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/type_traits/is_enum.hpp>
 

Modified: branches/release/boost/spirit/home/support/standard.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/standard.hpp (original)
+++ branches/release/boost/spirit/home/support/standard.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -8,7 +8,7 @@
 #define SPIRIT_STANDARD_JAN_31_2006_0529PM
 
 #include <boost/spirit/home/support/char_class.hpp>
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 
 namespace boost { namespace spirit { namespace standard
 {

Modified: branches/release/boost/spirit/home/support/standard_wide.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/standard_wide.hpp (original)
+++ branches/release/boost/spirit/home/support/standard_wide.hpp 2008-11-16 13:55:37 EST (Sun, 16 Nov 2008)
@@ -8,7 +8,7 @@
 #define SPIRIT_STANDARD_WIDE_JAN_31_2006_0529PM
 
 #include <boost/spirit/home/support/char_class.hpp>
-#include <boost/xpressive/proto/proto.hpp>
+#include <boost/proto/core.hpp>
 
 namespace boost { namespace spirit { namespace standard_wide
 {


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