Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r67909 - in sandbox/SOC/2010/phoenix3/boost/phoenix: bind core object operator scope statement
From: thom.heller_at_[hidden]
Date: 2011-01-10 04:12:50


Author: theller
Date: 2011-01-10 04:12:35 EST (Mon, 10 Jan 2011)
New Revision: 67909
URL: http://svn.boost.org/trac/boost/changeset/67909

Log:
removed unpack. fixes MSVC errors
Removed:
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/unpack.hpp
Text files modified:
   sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind.hpp | 2
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/environment.hpp | 8 +
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/construct.hpp | 38 ++++++++-
   sandbox/SOC/2010/phoenix3/boost/phoenix/object/new.hpp | 38 ++++++++-
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/member.hpp | 155 +++++++++++++++------------------------
   sandbox/SOC/2010/phoenix3/boost/phoenix/scope/lambda.hpp | 15 +++
   sandbox/SOC/2010/phoenix3/boost/phoenix/statement/try_catch.hpp | 31 +++++++
   7 files changed, 176 insertions(+), 111 deletions(-)

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/bind/bind.hpp 2011-01-10 04:12:35 EST (Mon, 10 Jan 2011)
@@ -22,7 +22,7 @@
     ////////////////////////////////////////////////////////////////////////////
     
     template <typename F>
- typename boost::result_of<function<F>()>::type const
+ typename result_of::function<F>::type
     bind(F f)
     {
         return function<F>(f)();

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/environment.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/environment.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/environment.hpp 2011-01-10 04:12:35 EST (Mon, 10 Jan 2011)
@@ -21,6 +21,7 @@
 
 namespace boost { namespace phoenix
 {
+ //: boost::result_of<proto::functional::at(Env, mpl::int_<N>)>
     namespace functional
     {
     #define BOOST_PHOENIX_GET_ENVIRONMENT(NAME, N) \
@@ -33,7 +34,12 @@
                                                                                 \
             template <typename This, typename Env> \
             struct result<This(Env)> \
- : boost::result_of<proto::functional::at(Env, mpl::int_<N>)> \
+ : result<This(Env const &)> \
+ {}; \
+ \
+ template <typename This, typename Env> \
+ struct result<This(Env &)> \
+ : fusion::result_of::at<Env, mpl::int_<N> > \
             {}; \
                                                                                 \
             template <typename Env> \

Deleted: sandbox/SOC/2010/phoenix3/boost/phoenix/core/unpack.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/unpack.hpp 2011-01-10 04:12:35 EST (Mon, 10 Jan 2011)
+++ (empty file)
@@ -1,354 +0,0 @@
-#if !BOOST_PP_IS_ITERATING
-
-/*=============================================================================
- Copyright (c) 2005-2010 Joel de Guzman
- Copyright (c) 2010 Eric Niebler
- Copyright (c) 2010 Thomas Heller
-
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef PHOENIX_CORE_UNPACK_HPP
-#define PHOENIX_CORE_UNPACK_HPP
-
-#include <boost/fusion/include/size.hpp>
-#include <boost/preprocessor/comparison/not_equal.hpp>
-#include <boost/preprocessor/iteration/iterate.hpp>
-#include <boost/preprocessor/punctuation/comma_if.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_trailing.hpp>
-#include <boost/preprocessor/repetition/repeat_from_to.hpp>
-#include <boost/preprocessor/seq/elem.hpp>
-#include <boost/preprocessor/seq/size.hpp>
-#include <boost/proto/proto.hpp>
-#include <boost/proto/functional.hpp>
-
-namespace boost { namespace phoenix
-{
- struct unpack {};
-
- namespace detail
- {
- template <
- typename Expr
- , typename State
- , typename Data
- , typename Seq
- , typename Fun
- , typename R
- , long Arity = fusion::result_of::size<
- typename proto::detail::uncvref<
- typename proto::when<proto::_, Seq>::
- template impl<Expr, State, Data>::result_type
- >::type
- >::value
- >
- struct unpack_impl;
- }
-}}
-
-#define PHOENIX_UNPACK_CHOICES \
- (phoenix::unpack) \
- (phoenix::unpack()) \
- (phoenix::unpack(Seq)) \
- (phoenix::unpack(Seq, Fun)) \
-/**/
-
-#define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (1, BOOST_PP_SEQ_SIZE(PHOENIX_UNPACK_CHOICES), \
- <boost/phoenix/core/unpack.hpp>)) \
-/**/
-#include BOOST_PP_ITERATE()
-
-#undef PHOENIX_UNPACK_CHOICES
-
-#endif
-
-#else
-
-#if BOOST_PP_ITERATION_DEPTH() == 1
-
-#define PHOENIX_UNPACK_I \
- BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(1)) \
-/**/
-
-#define PHOENIX_UNPACK \
- BOOST_PP_SEQ_ELEM(PHOENIX_UNPACK_I, PHOENIX_UNPACK_CHOICES) \
-/**/
-
-#define BOOST_PP_ITERATION_PARAMS_2 \
- (3, (1, BOOST_PROTO_MAX_ARITY, \
- <boost/phoenix/core/unpack.hpp>)) \
-/**/
-#include BOOST_PP_ITERATE()
-
-#undef PHOENIX_UNPACK
-#undef PHOENIX_UNPACK_I
-
-#elif BOOST_PP_ITERATION_DEPTH() == 2
-
-#define PHOENIX_UNPACK_J \
- BOOST_PP_FRAME_ITERATION(2) \
-/**/
-
-#define BOOST_PP_ITERATION_PARAMS_3 \
- (3, (BOOST_PP_DEC(PHOENIX_UNPACK_J), BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY), \
- <boost/phoenix/core/unpack.hpp>)) \
-/**/
-#include BOOST_PP_ITERATE()
-
-#undef PHOENIX_UNPACK_J
-
-#elif BOOST_PP_ITERATION_DEPTH() == 3
-
-#define PHOENIX_UNPACK_K \
- BOOST_PP_FRAME_ITERATION(3) \
-/**/
-
-#define PHOENIX_UNPACK_M0(Z, N, D) \
- , A ## N \
-/**/
-
-#define PHOENIX_UNPACK_SIG \
- R( \
- BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(PHOENIX_UNPACK_J), A) \
- BOOST_PP_COMMA_IF(BOOST_PP_DEC(PHOENIX_UNPACK_J)) \
- PHOENIX_UNPACK \
- BOOST_PP_REPEAT_FROM_TO( \
- BOOST_PP_FRAME_START(3) \
- , PHOENIX_UNPACK_K \
- , PHOENIX_UNPACK_M0 \
- , _ \
- ) \
- ) \
-/**/
-
-#define PHOENIX_UNPACK_M1(Z, N, D) \
- BOOST_PP_COMMA_IF(BOOST_PP_NOT_EQUAL(N, D)) BOOST_PP_CAT(A, N) \
-/**/
-
-#define PHOENIX_UNPACK_M2(Z, N, D) \
- , typename A ## N \
-/**/
-
-#define PHOENIX_UNPACK_TYPENAME_SIG \
- BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(PHOENIX_UNPACK_J), typename A) \
- BOOST_PP_REPEAT_FROM_TO( \
- BOOST_PP_FRAME_START(3) \
- , PHOENIX_UNPACK_K \
- , PHOENIX_UNPACK_M2 \
- , _ \
- ) \
-/**/
-
-namespace boost { namespace phoenix
-{
- namespace detail
- {
- template <
- typename Expr
- , typename State
- , typename Data
- , typename Seq
- , typename Fun
- , typename R
- BOOST_PP_COMMA_IF(BOOST_PP_DEC(PHOENIX_UNPACK_J))
- PHOENIX_UNPACK_TYPENAME_SIG
- >
- struct unpack_impl<
- Expr
- , State
- , Data
- , Seq
- , Fun
- , PHOENIX_UNPACK_SIG
- , 0
- >
- : proto::transform_impl<Expr, State, Data>
- {
- struct fun_type : proto::when<proto::_, Fun> {};
-
- typedef
- proto::call<
- R(
- BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(PHOENIX_UNPACK_J), A)
- BOOST_PP_COMMA_IF(
- BOOST_PP_AND(
- BOOST_PP_DEC(PHOENIX_UNPACK_J)
- , BOOST_PP_NOT_EQUAL(
- BOOST_PP_FRAME_START(3)
- , PHOENIX_UNPACK_K
- )
- )
- )
- BOOST_PP_REPEAT_FROM_TO(
- BOOST_PP_FRAME_START(3)
- , PHOENIX_UNPACK_K
- , PHOENIX_UNPACK_M1
- , BOOST_PP_FRAME_START(3)
- )
- )
- >
- which;
-
- typedef
- typename which::template impl<Expr, State, Data>::result_type
- result_type;
-
- result_type
- operator()(
- typename unpack_impl::expr_param e
- , typename unpack_impl::state_param s
- , typename unpack_impl::data_param d
- ) const
- {
- return
- typename which::
- template impl<Expr, State, Data>()(e, s, d);
- }
-
- };
-
- #define BOOST_PP_ITERATION_PARAMS_4 \
- (3, (1, BOOST_PROTO_MAX_ARITY, \
- <boost/phoenix/core/unpack.hpp>))
-
- #include BOOST_PP_ITERATE()
- }
-}}
-
-namespace boost { namespace proto {
- template <
- typename R
- #if PHOENIX_UNPACK_I > 1
- , typename Seq
- #endif
- #if PHOENIX_UNPACK_I > 2
- , typename Fun
- #endif
- BOOST_PP_COMMA_IF(BOOST_PP_DEC(PHOENIX_UNPACK_J))
- PHOENIX_UNPACK_TYPENAME_SIG
- >
- struct call<PHOENIX_UNPACK_SIG>
- : proto::transform<call<PHOENIX_UNPACK_SIG> >
- {
- template <typename Expr, typename State, typename Data>
- struct impl
- : phoenix::detail::unpack_impl<
- Expr
- , State
- , Data
- #if PHOENIX_UNPACK_I > 1
- , Seq
- #else
- , proto::_
- #endif
- #if PHOENIX_UNPACK_I > 2
- , Fun
- #else
- , proto::_
- #endif
- , PHOENIX_UNPACK_SIG
- >
- {};
- };
-
-}}
-
-#undef PHOENIX_UNPACK_K
-#undef PHOENIX_UNPACK_SIG
-#undef PHOENIX_UNPACK_TYPENAME_SIG
-#undef PHOENIX_UNPACK_M0
-#undef PHOENIX_UNPACK_M1
-#undef PHOENIX_UNPACK_M2
-
-#else
-
-#define PHOENIX_UNPACK_L BOOST_PP_FRAME_ITERATION(4)
-
-#if PHOENIX_UNPACK_J + PHOENIX_UNPACK_K + PHOENIX_UNPACK_L - 2 > BOOST_PROTO_MAX_ARITY
-//PHOENIX_UNPACK_SIG PHOENIX_UNPACK_J PHOENIX_UNPACK_K PHOENIX_UNPACK_L too much ...
-#else
- #define PHOENIX_UNPACK_M5(__, N, ___) \
- fun_type(proto::functional::at(Seq, mpl::int_<N>())) \
- /**/
-
- template <
- typename Expr
- , typename State
- , typename Data
- , typename Seq
- , typename Fun
- , typename R
- BOOST_PP_COMMA_IF(BOOST_PP_DEC(PHOENIX_UNPACK_J))
- PHOENIX_UNPACK_TYPENAME_SIG
- >
- struct unpack_impl<
- Expr
- , State
- , Data
- , Seq
- , Fun
- , PHOENIX_UNPACK_SIG
- , PHOENIX_UNPACK_L
- >
- : proto::transform_impl<Expr, State, Data>
- {
- struct fun_type : proto::when<proto::_, Fun> {};
-
- typedef
- proto::call<
- R(
- BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(PHOENIX_UNPACK_J), A)
- BOOST_PP_COMMA_IF(
- BOOST_PP_AND(BOOST_PP_DEC(PHOENIX_UNPACK_J)
- , PHOENIX_UNPACK_L)
- )
- BOOST_PP_ENUM(PHOENIX_UNPACK_L, PHOENIX_UNPACK_M5, _)
- BOOST_PP_COMMA_IF(
- BOOST_PP_AND(
- PHOENIX_UNPACK_L
- , BOOST_PP_NOT_EQUAL(
- BOOST_PP_FRAME_START(3)
- , PHOENIX_UNPACK_K
- )
- )
- )
- BOOST_PP_REPEAT_FROM_TO(
- BOOST_PP_FRAME_START(3)
- , PHOENIX_UNPACK_K
- , PHOENIX_UNPACK_M1
- , BOOST_PP_FRAME_START(3)
- )
- )
- >
- which;
-
- typedef
- typename which::template impl<Expr, State, Data>::result_type
- result_type;
-
- result_type
- operator()(
- typename unpack_impl::expr_param e
- , typename unpack_impl::state_param s
- , typename unpack_impl::data_param d
- ) const
- {
- return
- typename which::
- template impl<Expr, State, Data>()(e, s, d);
- }
-
- };
-
- #undef PHOENIX_UNPACK_M5
-#endif
-
-#undef PHOENIX_UNPACK_L
-
-#endif
-
-#endif
-

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/object/construct.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/object/construct.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/construct.hpp 2011-01-10 04:12:35 EST (Mon, 10 Jan 2011)
@@ -9,7 +9,6 @@
 #define PHOENIX_OBJECT_CONSTRUCT_HPP
 
 #include <boost/phoenix/core/expression.hpp>
-#include <boost/phoenix/core/unpack.hpp>
 #include <boost/phoenix/support/iterate.hpp>
 #include <boost/proto/fusion.hpp>
 
@@ -39,14 +38,43 @@
 
     };
 
+#define PHOENIX_CONSTRUCT_CHILD(Z, N, D) proto::_child_c<N>
+#define PHOENIX_CONSTRUCT_CALL(Z, N, D) \
+ proto::when< \
+ expression::construct< \
+ proto::terminal<proto::_> \
+ , BOOST_PP_ENUM_PARAMS(N, meta_grammar BOOST_PP_INTERCEPT) \
+ > \
+ , proto::lazy< \
+ construct_eval<proto::_value(proto::_child_c<0>)>( \
+ _env \
+ , BOOST_PP_ENUM_SHIFTED( \
+ BOOST_PP_INC(N) \
+ , PHOENIX_CONSTRUCT_CHILD \
+ , _ \
+ ) \
+ ) \
+ > \
+ > \
+ /**/
+
     template <typename Dummy>
     struct default_actions::when<rule::construct, Dummy>
- : proto::lazy<
- construct_eval<
- proto::_value(proto::_child_c<0>)
- >(_env, unpack(proto::functional::pop_front(proto::_)))
+ : proto::or_<
+ proto::when<
+ expression::construct<proto::terminal<proto::_> >
+ , proto::lazy<
+ construct_eval<
+ proto::_value(proto::_child_c<0>)
+ >(_env)
+ >
+ >
+ , BOOST_PP_ENUM_SHIFTED(PHOENIX_LIMIT, PHOENIX_CONSTRUCT_CALL, _)
>
+
     {};
+#undef PHOENIX_CONSTRUCT_CHILD
+#undef PHOENIX_CONSTRUCT_CALL
 
     template <typename T>
     typename expression::construct<detail::target<T> >::type const

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/object/new.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/object/new.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/object/new.hpp 2011-01-10 04:12:35 EST (Mon, 10 Jan 2011)
@@ -9,7 +9,6 @@
 #define PHOENIX_OBJECT_NEW_HPP
 
 #include <boost/phoenix/core/expression.hpp>
-#include <boost/phoenix/core/unpack.hpp>
 #include <boost/phoenix/support/iterate.hpp>
 #include <boost/proto/fusion.hpp>
 
@@ -40,14 +39,43 @@
         #include <boost/phoenix/object/detail/new_eval.hpp>
     };
 
+#define PHOENIX_NEW_CHILD(Z, N, D) proto::_child_c<N>
+#define PHOENIX_NEW_CALL(Z, N, D) \
+ proto::when< \
+ expression::new_< \
+ proto::terminal<proto::_> \
+ , BOOST_PP_ENUM_PARAMS(N, meta_grammar BOOST_PP_INTERCEPT) \
+ > \
+ , proto::lazy< \
+ new_eval<proto::_value(proto::_child_c<0>)>( \
+ _env \
+ , BOOST_PP_ENUM_SHIFTED( \
+ BOOST_PP_INC(N) \
+ , PHOENIX_NEW_CHILD \
+ , _ \
+ ) \
+ ) \
+ > \
+ > \
+ /**/
+
     template <typename Dummy>
     struct default_actions::when<rule::new_, Dummy>
- : proto::lazy<
- new_eval<
- proto::_value(proto::_child_c<0>)
- >(_env, unpack(proto::functional::pop_front(proto::_)))
+ : proto::or_<
+ proto::when<
+ expression::new_<proto::terminal<proto::_> >
+ , proto::lazy<
+ new_eval<
+ proto::_value(proto::_child_c<0>)
+ >(_env)
+ >
+ >
+ , BOOST_PP_ENUM_SHIFTED(PHOENIX_LIMIT, PHOENIX_NEW_CALL, _)
>
+
     {};
+#undef PHOENIX_NEW_CHILD
+#undef PHOENIX_NEW_CALL
 
     template <typename T>
     typename expression::new_<detail::target<T> >::type const

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/operator/member.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/operator/member.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator/member.hpp 2011-01-10 04:12:35 EST (Mon, 10 Jan 2011)
@@ -5,7 +5,6 @@
 
 #include <boost/get_pointer.hpp>
 #include <boost/phoenix/core/expression.hpp>
-#include <boost/phoenix/core/unpack.hpp>
 #include <boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp>
 #include <boost/phoenix/support/iterate.hpp>
 #include <boost/type_traits/is_member_function_pointer.hpp>
@@ -28,126 +27,92 @@
         return detail::mem_fun_ptr_gen<actor<Object>, MemPtr>(obj, ptr);
     }
 
+ namespace result_of
+ {
+ template <
+ typename Env
+ , typename Expr
+ , long Arity = proto::arity_of<Expr>::value
+ >
+ struct mem_fun_ptr_eval;
+
+ #include <boost/phoenix/operator/detail/mem_fun_ptr_eval_result_of.hpp>
+ }
+
         struct mem_fun_ptr_eval
                 : proto::callable
         {
         template<typename Sig>
         struct result;
+
+ template <typename This, typename Env, typename Expr>
+ struct result<This(Env, Expr const &)>
+ : result<This(Env const &, Expr const &)>
+ {};
 
- #define PHOENIX_MEMBER_RESULT_OF(_, N, __) \
- typename boost::result_of< \
- evaluator(BOOST_PP_CAT(A, N) const&, Env&) \
- >::type \
- /**/
+ template <typename This, typename Env, typename Expr>
+ struct result<This(Env &, Expr const &)>
+ : result_of::mem_fun_ptr_eval<Env, Expr>
+ {};
 
- #define PHOENIX_MEMBER_EVAL(_, N, __) \
- eval(BOOST_PP_CAT(a, N), env)
+ template <typename Env, typename Expr>
+ typename result_of::mem_fun_ptr_eval<Env, Expr>::type
+ operator()(Env & env, Expr const & expr) const
+ {
+ return
+ this->evaluate(
+ env
+ , expr
+ , typename proto::arity_of<Expr>::type()
+ );
+ }
+
+ #define PHOENIX_MEMBER_EVAL(Z, N, D) \
+ BOOST_PP_COMMA_IF(BOOST_PP_NOT(BOOST_PP_EQUAL(N, 2))) \
+ eval(proto::child_c< N >(expr), env) \
     /**/
-
+ private:
     #define PHOENIX_ITERATION_PARAMS \
- (4, (0, PHOENIX_LIMIT, \
+ (4, (2, PHOENIX_LIMIT, \
         <boost/phoenix/operator/member.hpp>, \
         PHOENIX_ITERATE_OPERATOR)) \
     /**/
         #include PHOENIX_ITERATE()
- #undef PHOENIX_MEMBER_RESULT_OF
     #undef PHOENIX_MEMBER_EVAL
         };
 
     template <typename Dummy>
     struct default_actions::when<rule::mem_fun_ptr, Dummy>
- : proto::call<mem_fun_ptr_eval(_env, unpack)>
+ : proto::call<mem_fun_ptr_eval(_env, proto::_)>
     {};
 }}
 
 #endif
 
 #else // PHOENIX_IS_ITERATING
-
-
- template<
- typename This
- , typename Env
- , typename T1
- , typename T2
- BOOST_PP_COMMA_IF(PHOENIX_ITERATION) PHOENIX_typename_A
- >
- struct result<
- This(
- Env
- , T1 const&
- , T2 const&
- BOOST_PP_COMMA_IF(PHOENIX_ITERATION) PHOENIX_A_const_ref
- )
- >
- : result<
- This(
- Env const &
- , T1 const&
- , T2 const&
- BOOST_PP_COMMA_IF(PHOENIX_ITERATION) PHOENIX_A_const_ref
- )
- >
- {};
-
- template<
- typename This
- , typename Env
- , typename T1
- , typename T2
- BOOST_PP_COMMA_IF(PHOENIX_ITERATION) PHOENIX_typename_A
- >
- struct result<
- This(
- Env &
- , T1 const&
- , T2 const&
- BOOST_PP_COMMA_IF(PHOENIX_ITERATION) PHOENIX_A_const_ref
- )
- >
- : boost::result_of<
- typename boost::remove_reference<
- typename boost::result_of<
- evaluator(T2 const &, Env&)>::type
- >::type(
- typename boost::result_of<
- evaluator(T1 const&, Env&)
- >::type
- BOOST_PP_ENUM_TRAILING(
- PHOENIX_ITERATION, PHOENIX_MEMBER_RESULT_OF, _
- )
- )
- >
- {};
-
- template <
- typename Env
- , typename T1
- , typename T2
- BOOST_PP_ENUM_TRAILING_PARAMS(PHOENIX_ITERATION, typename A)
- >
- typename result<
- mem_fun_ptr_eval(
- Env &
- , T1 const&
- , T2 const&
- BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(
- PHOENIX_ITERATION
- , A
- , const & BOOST_PP_INTERCEPT
- )
- )
- >::type
- operator()(
+
+ template <typename Env, typename Expr>
+ typename result_of::mem_fun_ptr_eval<Env, Expr>::type
+ evaluate(
             Env & env
- , T1 const& t1
- , T2 const& t2
- BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(PHOENIX_ITERATION, A, const & a)
+ , Expr const & expr
+ , mpl::long_<PHOENIX_ITERATION>
         ) const
- {
- return (get_pointer(eval(t1, env))->*eval(t2, env))
- (BOOST_PP_ENUM(PHOENIX_ITERATION, PHOENIX_MEMBER_EVAL, _));
- }
+ {
+ return
+ (
+ get_pointer(eval(proto::child_c<0>(expr), env))
+ ->*eval(proto::child_c<1>(expr), env)
+ )(
+ BOOST_PP_REPEAT_FROM_TO(
+ 2
+ , PHOENIX_ITERATION
+ , PHOENIX_MEMBER_EVAL
+ , PHOENIX_ITERATION
+ )
+ );
+ }
+
 
 #endif
 

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/scope/lambda.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/scope/lambda.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/scope/lambda.hpp 2011-01-10 04:12:35 EST (Mon, 10 Jan 2011)
@@ -12,7 +12,6 @@
 #include <boost/phoenix/core/limits.hpp>
 #include <boost/mpl/int.hpp>
 #include <boost/phoenix/core/actor.hpp>
-#include <boost/phoenix/core/unpack.hpp>
 #include <boost/phoenix/scope/local_variable.hpp>
 
 namespace boost { namespace phoenix
@@ -419,7 +418,19 @@
 
     template <typename Dummy>
     struct default_actions::when<rule::lambda_actor, Dummy>
- : proto::call<lambda_actor_eval(_env, unpack)>
+ : proto::or_<
+ proto::when<
+ expression::lambda_actor<meta_grammar>
+ , lambda_actor_eval(_env, proto::_child_c<0>)
+ >
+ , proto::when<
+ expression::lambda_actor<
+ rule::local_var_def_list
+ , meta_grammar
+ >
+ , lambda_actor_eval(_env, proto::_child_c<0>, proto::_child_c<1>)
+ >
+ >
     {};
     
     template <typename Locals = void, typename Dummy = void>

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/statement/try_catch.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/statement/try_catch.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/statement/try_catch.hpp 2011-01-10 04:12:35 EST (Mon, 10 Jan 2011)
@@ -11,7 +11,6 @@
 #define PHOENIX_STATEMENT_TRY_CATCH_HPP
 
 #include <boost/phoenix/core/expression.hpp>
-#include <boost/phoenix/core/unpack.hpp>
 
 namespace boost { namespace phoenix
 {
@@ -95,17 +94,45 @@
 
     struct try_catch_eval
     {
+ BOOST_PROTO_CALLABLE()
+
         typedef void result_type;
 
         // bring in the operator overloads
         #include <boost/phoenix/statement/detail/try_catch_eval.hpp>
     };
 
+#define PHOENIX_TRY_CATCH_CHILD(Z, N, D) proto::_child_c<N>
+#define PHOENIX_TRY_CATCH_CALL(Z, N, D) \
+ proto::when< \
+ expression::try_catch< \
+ BOOST_PP_ENUM_PARAMS(N, proto::_ BOOST_PP_INTERCEPT) \
+ > \
+ , try_catch_eval( \
+ _env \
+ , BOOST_PP_ENUM( \
+ N \
+ , PHOENIX_TRY_CATCH_CHILD \
+ , _ \
+ ) \
+ ) \
+ > \
+ /**/
+
     template <typename Dummy>
     struct default_actions::when<rule::try_catch, Dummy>
- : proto::call<try_catch_eval(_env, unpack(proto::_))>
+ : proto::or_<
+ BOOST_PP_ENUM_SHIFTED(
+ BOOST_PP_INC(PHOENIX_CATCH_LIMIT)
+ , PHOENIX_TRY_CATCH_CALL
+ , _
+ )
+ >
     {};
 
+#undef PHOENIX_TRY_CATCH_CHILD
+#undef PHOENIX_TRY_CATCH_CALL
+
     namespace detail
     {
         struct try_catch_is_nullary


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