Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r66470 - in sandbox/SOC/2010/phoenix3: boost/phoenix boost/phoenix/core boost/phoenix/core/detail boost/phoenix/operator libs/phoenix/test libs/phoenix/test/operator
From: thom.heller_at_[hidden]
Date: 2010-11-09 07:34:01


Author: theller
Date: 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
New Revision: 66470
URL: http://svn.boost.org/trac/boost/changeset/66470

Log:
continued with new design

Added:
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/expression.hpp (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/is_nullary.hpp (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/arithmetic.hpp (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/bitwise.hpp (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/comparision.hpp (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/logical.hpp (contents, props changed)
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/self.hpp (contents, props changed)
Text files modified:
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/actor.hpp | 143 ++++++++++++++++++---------------------
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/argument.hpp | 1
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/actor_operator.hpp | 38 ++++++----
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/actor_result_of.hpp | 9 ++
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/make_basic_environment.hpp | 17 +++-
   sandbox/SOC/2010/phoenix3/boost/phoenix/core/environment.hpp | 81 +++++++++++++--------
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator.hpp | 47 ++++++++++++
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/if_else.hpp | 28 ++++++-
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/io.hpp | 4
   sandbox/SOC/2010/phoenix3/boost/phoenix/operator/member.hpp | 9 +
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/Jamfile | 20 ++--
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/arithmetic_tests.cpp | 1
   sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/self_tests.cpp | 2
   13 files changed, 250 insertions(+), 150 deletions(-)

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/actor.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/actor.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/actor.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -11,15 +11,11 @@
 
 #include <boost/mpl/identity.hpp>
 #include <boost/mpl/eval_if.hpp>
-/*#include <boost/phoenix/core/arity.hpp>
-#include <boost/phoenix/core/compose.hpp>
-#include <boost/phoenix/core/domain.hpp>
-#include <boost/phoenix/core/no_nullary.hpp>*/
 #include <boost/phoenix/core/domain.hpp>
 #include <boost/phoenix/core/environment.hpp>
+#include <boost/phoenix/core/is_nullary.hpp>
 #include <boost/phoenix/core/limits.hpp>
 #include <boost/phoenix/core/meta_grammar.hpp>
-#include <boost/phoenix/core/is_nullary.hpp>
 #include <boost/phoenix/support/iterate.hpp>
 #include <boost/proto/extends.hpp>
 #include <boost/utility/result_of.hpp>
@@ -53,11 +49,11 @@
 
             typedef typename
                 mpl::eval_if<
- typename is_nullary<Expr>::type//false//arity == 0 // avoid calling result_of::actor when this is false
+ typename is_nullary<Expr>::type // avoid calling result_of::actor when this is false
                   , boost::result_of<
                         evaluator(
- Expr const&
- , fusion::vector2<typename make_basic_environment<>::type&, default_actions>
+ Expr const &
+ , typename make_basic_environment<default_actions>::type &
                         )
>
                   , mpl::identity<detail::error_expecting_arguments>
@@ -67,48 +63,36 @@
 
         template <typename Expr, typename A0>
         struct actor<Expr, A0>
- /*: boost::result_of<eval_grammar(
- ::boost::phoenix::actor<Expr> const &,
- typename make_basic_environment<A0>::type&)
- >*/
             : boost::result_of<
                 evaluator(
- Expr const&
- , fusion::vector2<typename make_basic_environment<A0>::type&, default_actions>
+ Expr const &
+ , typename make_basic_environment<default_actions, A0>::type &
                 )
>
         {};
 
         template <typename Expr, typename A0, typename A1>
         struct actor<Expr, A0, A1>
- /*: boost::result_of<eval_grammar(
- ::boost::phoenix::actor<Expr> const &,
- typename make_basic_environment<A0, A1>::type&)
- >*/
             : boost::result_of<
                 evaluator(
                     Expr const&
- , fusion::vector2<typename make_basic_environment<A0, A1>::type&, default_actions>
+ , typename make_basic_environment<default_actions, A0, A1>::type &
                 )
>
         {};
 
         template <typename Expr, typename A0, typename A1, typename A2>
         struct actor<Expr, A0, A1, A2>
- /*: boost::result_of<eval_grammar(
- ::boost::phoenix::actor<Expr> const &,
- typename make_basic_environment<A0, A1, A2>::type&)
- >*/
             : boost::result_of<
                 evaluator(
                     Expr const&
- , fusion::vector2<typename make_basic_environment<A0, A1, A2>::type&, default_actions>
+ , typename make_basic_environment<default_actions, A0, A1, A2>::type &
                 )
>
         {};
 
         // Bring in the rest
- //#include <boost/phoenix/core/detail/actor_result_of.hpp>
+ #include <boost/phoenix/core/detail/actor_result_of.hpp>
     }
     
     /*
@@ -146,15 +130,10 @@
         typename result_of::actor<Expr>::type
         operator()() const
         {
- typename make_basic_environment<>::type args;
+ typedef make_basic_environment<default_actions> env_type;
+ typename env_type::type env = env_type::make();
 
- typedef make_basic_environment<>::type params_type;
- typedef fusion::vector2<params_type, default_actions> env_type;
-
- env_type env(args, default_actions());
             return eval(*this, env);
-
- //return eval(this->proto_base(), args);
         }
 
         template <typename This, typename A0>
@@ -166,32 +145,30 @@
         typename result_of::actor<Expr, A0&>::type
         operator()(A0& a0) const
         {
- typename make_basic_environment<A0&>::type args(a0);
- typedef typename make_basic_environment<A0&>::type params_type;
- typedef fusion::vector2<params_type, default_actions> env_type;
-
- env_type env(args, default_actions());
+ typedef make_basic_environment<default_actions, A0&> env_type;
+ typename env_type::type env = env_type::make(a0);
 
             return eval(*this, env);
         }
 
- /*
         template <typename A0>
         typename result_of::actor<Expr, A0 const&>::type
         operator()(A0 const& a0) const
         {
- typename make_basic_environment<A0 const&>::type args(a0);
+ typedef make_basic_environment<default_actions, A0 const&> env_type;
+ typename env_type::type env = env_type::make(a0);
             
- return eval(*this, args);
+ return eval(*this, env);
         }
 
+ /*
         template <typename A0>
         typename compose<actor_fun_eval<actor<Expr>, actor<A0> >, actor<Expr>, actor<A0> >::type const
         operator()(actor<A0> const& a0) const
         {
             return compose<actor_fun_eval<actor<Expr>, actor<A0> >, actor<Expr>, actor<A0> >()(*this, a0);
         }
- */
+ */
 
         template <typename This, typename A0, typename A1>
         struct result<This(A0&, A1&)>
@@ -202,43 +179,43 @@
         typename result_of::actor<Expr, A0&, A1&>::type
         operator()(A0& a0, A1& a1) const
         {
- typedef typename make_basic_environment<A0&, A1&>::type params_type;
- params_type args(a0, a1);
- typedef fusion::vector2<params_type, default_actions> env_type;
-
- env_type env(args, default_actions());
+ typedef make_basic_environment<default_actions, A0&, A1&> env_type;
+ typename env_type::type env = env_type::make(a0, a1);
 
             return eval(*this, env);
         }
 
- /*
         template <typename A0, typename A1>
         typename result_of::actor<Expr, A0&, A1 const&>::type
         operator()(A0& a0, A1 const& a1) const
         {
- typename make_basic_environment<A0&, A1 const&>::type args(a0, a1);
+ typedef make_basic_environment<default_actions, A0&, A1 const&> env_type;
+ typename env_type::type env = env_type::make(a0, a1);
             
- return eval(*this, args);
+ return eval(*this, env);
         }
 
         template <typename A0, typename A1>
         typename result_of::actor<Expr, A0 const&, A1&>::type
         operator()(A0 const& a0, A1& a1) const
         {
- typename make_basic_environment<A0 const&, A1&>::type args(a0, a1);
+ typedef make_basic_environment<default_actions, A0 const&, A1 &> env_type;
+ typename env_type::type env = env_type::make(a0, a1);
             
- return eval(*this, args);
+ return eval(*this, env);
         }
 
         template <typename A0, typename A1>
         typename result_of::actor<Expr, A0 const&, A1 const&>::type
         operator()(A0 const& a0, A1 const& a1) const
         {
- typename make_basic_environment<A0 const&, A1 const&>::type args(a0, a1);
+ typedef make_basic_environment<default_actions, A0 const&, A1 const&> env_type;
+ typename env_type::type env = env_type::make(a0, a1);
             
- return eval(this->proto_base(), args);
+ return eval(this->proto_base(), env);
         }
 
+ /*
         template <typename A0, typename A1>
         typename compose<
             actor_fun_eval<
@@ -253,6 +230,7 @@
               , actor<Expr>, actor<A0>, actor<A1>
>()(*this, a0, a1);
         }
+ */
 
         template <typename This, typename A0, typename A1, typename A2>
         struct result<This(A0, A1, A2)>
@@ -263,74 +241,83 @@
         typename result_of::actor<Expr, A0&, A1&, A2&>::type
         operator()(A0& a0, A1& a1, A2& a2) const
         {
- typename make_basic_environment<A0&, A1&, A2&>::type args(a0, a1, a2);
-
- return eval(*this, args);
+ typedef make_basic_environment<default_actions, A0&, A1&, A2&> env_type;
+ typename env_type::type env = env_type::make(a0, a1, a2);
+
+ return eval(*this, env);
         }
 
         template <typename A0, typename A1, typename A2>
         typename result_of::actor<Expr, A0 const&, A1&, A2&>::type
         operator()(A0 const& a0, A1& a1, A2& a2) const
         {
- typename make_basic_environment<A0 const&, A1&, A2&>::type args(a0, a1, a2);
-
- return eval(*this, args);
+ typedef make_basic_environment<default_actions, A0 const&, A1&, A2&> env_type;
+ typename env_type::type env = env_type::make(a0, a1, a2);
+
+ return eval(*this, env);
         }
 
         template <typename A0, typename A1, typename A2>
         typename result_of::actor<Expr, A0&, A1 const&, A2&>::type
         operator()(A0& a0, A1 const& a1, A2& a2) const
         {
- typename make_basic_environment<A0&, A1 const&, A2&>::type args(a0, a1, a2);
-
- return eval(*this, args);
+ typedef make_basic_environment<default_actions, A0&, A1 const&, A2&> env_type;
+ typename env_type::type env = env_type::make(a0, a1, a2);
+
+ return eval(*this, env);
         }
 
         template <typename A0, typename A1, typename A2>
         typename result_of::actor<Expr, A0&, A1&, A2 const&>::type
         operator()(A0& a0, A1& a1, A2 const& a2) const
         {
- typename make_basic_environment<A0&, A1&, A2 const&>::type args(a0, a1, a2);
-
- return eval(*this, args);
+ typedef make_basic_environment<default_actions, A0&, A1&, A2 const&> env_type;
+ typename env_type::type env = env_type::make(a0, a1, a2);
+
+ return eval(*this, env);
         }
 
         template <typename A0, typename A1, typename A2>
         typename result_of::actor<Expr, A0 const&, A1 const&, A2&>::type
         operator()(A0 const& a0, A1 const& a1, A2& a2) const
         {
- typename make_basic_environment<A0 const&, A1 const&, A2&>::type args(a0, a1, a2);
-
- return eval(*this, args);
+ typedef make_basic_environment<default_actions, A0 const&, A1 const&, A2&> env_type;
+ typename env_type::type env = env_type::make(a0, a1, a2);
+
+ return eval(*this, env);
         }
 
         template <typename A0, typename A1, typename A2>
         typename result_of::actor<Expr, A0&, A1 const&, A2 const&>::type
         operator()(A0& a0, A1 const& a1, A2 const& a2) const
         {
- typename make_basic_environment<A0&, A1 const&, A2 const&>::type args(a0, a1, a2);
-
- return eval(*this, args);
+ typedef make_basic_environment<default_actions, A0&, A1 const&, A2 const&> env_type;
+ typename env_type::type env = env_type::make(a0, a1, a2);
+
+ return eval(*this, env);
         }
 
         template <typename A0, typename A1, typename A2>
         typename result_of::actor<Expr, A0 const&, A1&, A2 const&>::type
         operator()(A0 const& a0, A1& a1, A2 const& a2) const
         {
- typename make_basic_environment<A0 const&, A1&, A2 const&>::type args(a0, a1, a2);
-
- return eval(*this, args);
+ typedef make_basic_environment<default_actions, A0 const&, A1&, A2 const&> env_type;
+ typename env_type::type env = env_type::make(a0, a1, a2);
+
+ return eval(*this, env);
         }
 
         template <typename A0, typename A1, typename A2>
         typename result_of::actor<Expr, A0 const&, A1 const&, A2 const&>::type
         operator()(A0 const& a0, A1 const& a1, A2 const& a2) const
         {
- typename make_basic_environment<A0 const&, A1 const&, A2 const&>::type args(a0, a1, a2);
-
- return eval(*this, args);
+ typedef make_basic_environment<default_actions, A0 const&, A1 const&, A2 const&> env_type;
+ typename env_type::type env = env_type::make(a0, a1, a2);
+
+ return eval(*this, env);
         }
 
+ /*
         template <typename A0, typename A1, typename A2>
         typename compose<
             actor_fun_eval<
@@ -345,10 +332,10 @@
               , actor<Expr>, actor<A0>, actor<A1>, actor<A2>
>()(*this, a0, a1, a2);
         }
+ */
 
         // Bring in the rest
         #include <boost/phoenix/core/detail/actor_operator.hpp>
- */
     };
 
     /*

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/argument.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/argument.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/argument.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -18,6 +18,7 @@
 */
 #include <boost/phoenix/core/limits.hpp>
 #include <boost/phoenix/core/actor.hpp>
+#include <boost/phoenix/core/terminal.hpp>
 
 #include <boost/fusion/sequence/intrinsic/at.hpp>
 

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/actor_operator.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/actor_operator.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/actor_operator.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -35,18 +35,20 @@
         typename result_of::actor<Expr, PHOENIX_A_ref>::type
         operator()(PHOENIX_A_ref_a) const
         {
- PHOENIX_ENV(PHOENIX_A_ref) args( PHOENIX_a);
+ typedef make_basic_environment<default_actions, PHOENIX_A_ref> env_type;
+ typename env_type::type env = env_type::make(PHOENIX_a);
 
- return eval(*this, args);
+ return eval(*this, env);
         }
 
         template <PHOENIX_typename_A>
         typename result_of::actor<Expr, PHOENIX_A_const_ref>::type
         operator()(PHOENIX_A_const_ref_a) const
         {
- PHOENIX_ENV(PHOENIX_A_const_ref) args( PHOENIX_a);
+ typedef make_basic_environment<default_actions, PHOENIX_A_const_ref> env_type;
+ typename env_type::type env = env_type::make(PHOENIX_a);
 
- return eval(*this, args);
+ return eval(*this, env);
         }
 
 #else
@@ -58,23 +60,28 @@
 // if PHOENIX_ITERATION > PHOENIX_LIMIT_PERFECT_FORWARD
 // only operator()(A const &...a) and operator()(A &...a) are generated
 // this is all handled by the PP mumbo jumbo above
-#define PHOENIX_ACTOR_OPERATOR(_, I, __) \
- template <PHOENIX_typename_A> \
- typename result_of::actor<Expr, PHOENIX_PERM_A(I)>::type \
- operator()(PHOENIX_PERM_A_a(I)) const \
- { \
- BOOST_PROTO_ASSERT_MATCHES(*this, eval_grammar); \
- PHOENIX_ENV(PHOENIX_PERM_A(I)) args(PHOENIX_a); \
- \
- return eval(*this, args); \
- }
+#define PHOENIX_ACTOR_OPERATOR(_, I, __) \
+ template <PHOENIX_typename_A> \
+ typename result_of::actor<Expr, PHOENIX_PERM_A(I)>::type \
+ operator()(PHOENIX_PERM_A_a(I)) const \
+ { \
+ typedef \
+ make_basic_environment< \
+ default_actions, PHOENIX_PERM_A(I) \
+ > \
+ env_type; \
+ typename env_type::type env = env_type::make(PHOENIX_a); \
+ \
+ return eval(*this, env); \
+ } \
+ /**/
 
         BOOST_PP_REPEAT( PHOENIX_PERM_SIZE, PHOENIX_ACTOR_OPERATOR, _)
 
 #undef PHOENIX_ACTOR_OPERATOR
 
 #endif
-
+/*
         template <PHOENIX_typename_A>
         typename compose<
             actor_fun_eval<
@@ -89,6 +96,7 @@
               , actor<Expr>, BOOST_PP_ENUM_BINARY_PARAMS(PHOENIX_ITERATION, actor<A, > BOOST_PP_INTERCEPT)
>()(*this, a0, a1, a2);
         }
+*/
 
 #undef PHOENIX_ENV
 

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/actor_result_of.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/actor_result_of.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/actor_result_of.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -26,9 +26,16 @@
 
         template <typename Expr, PHOENIX_typename_A>
         struct actor<Expr, BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, A)>
- : boost::result_of<eval_grammar(
+ /*: boost::result_of<eval_grammar(
                 ::boost::phoenix::actor<Expr> const &,
                     PHOENIX_ENV(PHOENIX_A)&)>
+ */
+ : boost::result_of<
+ evaluator(
+ Expr const&
+ , typename make_basic_environment<default_actions, PHOENIX_A>::type &
+ )
+ >
         {};
 
 #undef PHOENIX_ENV

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/make_basic_environment.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/make_basic_environment.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/detail/make_basic_environment.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -20,9 +20,18 @@
 
 #else
 
- template <PHOENIX_typename_A>
- struct make_basic_environment<PHOENIX_A>
- : mpl::identity<
- BOOST_PP_CAT(fusion::vector, PHOENIX_ITERATION)<PHOENIX_A> > {};
+ template <typename Actions, PHOENIX_typename_A>
+ struct make_basic_environment<Actions, PHOENIX_A>
+ {
+ typedef
+ BOOST_PP_CAT(fusion::vector, PHOENIX_ITERATION)<PHOENIX_A>
+ params_type;
+ typedef fusion::vector2<params_type, Actions> type;
+
+ static type make(PHOENIX_A_a)
+ {
+ return type(params_type(PHOENIX_a), Actions());
+ }
+ };
 
 #endif

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 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -9,6 +9,7 @@
 
 #include <boost/phoenix/core/limits.hpp>
 #include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/fusion/container/vector.hpp>
 #include <boost/fusion/support/is_sequence.hpp>
 #include <boost/phoenix/support/iterate.hpp>
 #include <boost/utility/enable_if.hpp>
@@ -137,39 +138,57 @@
     };
     */
     
- template </*typename Actions,*/ PHOENIX_typename_A_void(PHOENIX_ARG_LIMIT), typename Dummy = void>
+ template <typename Actions, PHOENIX_typename_A_void(PHOENIX_ARG_LIMIT), typename Dummy = void>
     struct make_basic_environment;
     
- //template <typename Actions>
- template <>
- struct make_basic_environment<>//<Actions>
- : mpl::identity<//fusion::vector2<
- fusion::vector0<>
- //, Actions>
- >
- {};
-
- //template <typename Actions, typename A0>
- template <typename A0>
- struct make_basic_environment</*Actions,*/ A0>
- : mpl::identity<//fusion::vector2<
- fusion::vector1<A0>
- //, Actions>
- >
- {};
-
- template <typename A0, typename A1>
- struct make_basic_environment<A0, A1>
- : mpl::identity<//fusion::vector2<
- fusion::vector2<A0, A1>
- //, Actions>
- >
- {};
-
- template <typename A0, typename A1, typename A2>
- struct make_basic_environment<A0, A1, A2>
- : mpl::identity<fusion::vector3<A0, A1, A2> >
- {};
+ template <typename Actions>
+ struct make_basic_environment<Actions>
+ {
+ typedef fusion::vector0<> params_type;
+ typedef fusion::vector2<params_type, Actions> type;
+
+ static type make()
+ {
+ return type(params_type(), Actions());
+ }
+ };
+
+ template <typename Actions, typename A0>
+ struct make_basic_environment<Actions, A0>
+ {
+ typedef fusion::vector1<A0> params_type;
+ typedef fusion::vector2<params_type, Actions> type;
+
+ static type make(A0 a0)
+ {
+ return type(params_type(a0), Actions());
+ }
+ };
+
+ template <typename Actions, typename A0, typename A1>
+ struct make_basic_environment<Actions, A0, A1>
+ {
+ typedef fusion::vector2<A0, A1> params_type;
+ typedef fusion::vector2<params_type, Actions> type;
+
+ static type make(A0 a0, A1 a1)
+ {
+ params_type params(a0, a1);
+ return type(params, Actions());
+ }
+ };
+
+ template <typename Actions, typename A0, typename A1, typename A2>
+ struct make_basic_environment<Actions, A0, A1, A2>
+ {
+ typedef fusion::vector3<A0, A1, A2> params_type;
+ typedef fusion::vector2<params_type, Actions> type;
+
+ static type make(A0 a0, A1 a1, A2 a2)
+ {
+ return type(params_type(a0, a1, a2), Actions());
+ }
+ };
 
     // Bring in the rest
     #include <boost/phoenix/core/detail/make_basic_environment.hpp>

Added: sandbox/SOC/2010/phoenix3/boost/phoenix/core/expression.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/expression.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -0,0 +1,37 @@
+
+#ifndef 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_IS_NULLARY_HPP
+#define PHOENIX_CORE_IS_NULLARY_HPP
+
+namespace boost { namespace phoenix
+{
+ template <typename Expr> struct actor;
+
+ template <
+ template <typename> Actor
+ , PHOENIX_A_void(PHOENIX_LIMIT)
+ , typename Dummy = void>
+ struct expr_ext;
+
+ template <PHOENIX_A_void(PHOENIX_LIMIT)>
+ struct expr : expr_ext<actor, PHOENIX_A(PHOENIX_LIMIT)> {};
+
+}}
+
+#endif
+
+#else
+
+template <
+struct
+
+#endif

Added: sandbox/SOC/2010/phoenix3/boost/phoenix/core/is_nullary.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/core/is_nullary.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -0,0 +1,60 @@
+/*=============================================================================
+ 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_IS_NULLARY_HPP
+#define PHOENIX_CORE_IS_NULLARY_HPP
+
+#include <boost/proto/proto.hpp>
+#include <boost/phoenix/core/environment.hpp>
+#include <boost/phoenix/core/meta_grammar.hpp>
+#include <boost/phoenix/core/terminal.hpp>
+
+namespace boost { namespace phoenix
+{
+ namespace detail
+ {
+ struct is_nullary_
+ {
+ template <typename Rule, typename Dummy = void>
+ struct when
+ : proto::fold<
+ proto::_
+ , mpl::true_()
+ , mpl::and_<
+ proto::_state
+ , evaluator(proto::_, _env)
+ >()
+ >
+ {};
+ };
+
+ template <typename Dummy>
+ struct is_nullary_::when<rule::argument, Dummy>
+ : proto::make<mpl::false_()>
+ {};
+
+ template <typename Dummy>
+ struct is_nullary_::when<rule::custom_terminal, Dummy>
+ : proto::make<mpl::true_()>
+ {};
+
+ template <typename Dummy>
+ struct is_nullary_::when<rule::terminal, Dummy>
+ : proto::make<mpl::true_()>
+ {};
+ }
+
+ template <typename Expr>
+ struct is_nullary
+ : boost::result_of<evaluator(Expr const&, make_basic_environment<detail::is_nullary_>::type&)>
+ {};
+
+}}
+
+#endif
+

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/operator.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/operator.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -7,10 +7,53 @@
 #ifndef PHOENIX_OPERATOR_HPP
 #define PHOENIX_OPERATOR_HPP
 
+#define PHOENIX_UNARY_RULE(_, __, name) \
+ struct name \
+ : proto::unary_expr<proto::tag::name, meta_grammar> \
+ {}; \
+ /**/
+
+#define PHOENIX_BINARY_RULE(_, __, name) \
+ struct name \
+ : proto::binary_expr<proto::tag::name, meta_grammar, meta_grammar> \
+ {}; \
+ /**/
+
+#define PHOENIX_GRAMMAR(_, __, name) \
+ template <typename Dummy> \
+ struct meta_grammar::case_<proto::tag::name, Dummy> \
+ : proto::when<rule::name, proto::external_transform> \
+ {}; \
+ /**/
+
+#define PHOENIX_UNARY_OPERATORS(ops) \
+ namespace rule { \
+ BOOST_PP_SEQ_FOR_EACH(PHOENIX_UNARY_RULE, _, ops) \
+ } \
+ BOOST_PP_SEQ_FOR_EACH(PHOENIX_GRAMMAR, _, ops) \
+ /**/
+
+#define PHOENIX_BINARY_OPERATORS(ops) \
+ namespace rule { \
+ BOOST_PP_SEQ_FOR_EACH(PHOENIX_BINARY_RULE, _, ops) \
+ } \
+ BOOST_PP_SEQ_FOR_EACH(PHOENIX_GRAMMAR, _, ops) \
+ /**/
+
 #include <boost/phoenix/version.hpp>
-#include <boost/phoenix/operator/operator.hpp>
+#include <boost/phoenix/operator/arithmetic.hpp>
+#include <boost/phoenix/operator/bitwise.hpp>
+#include <boost/phoenix/operator/comparision.hpp>
 #include <boost/phoenix/operator/if_else.hpp>
+#include <boost/phoenix/operator/self.hpp>
+#include <boost/phoenix/operator/logical.hpp>
 #include <boost/phoenix/operator/io.hpp>
-//#include <boost/phoenix/operator/member.hpp>
+#include <boost/phoenix/operator/member.hpp>
+
+#undef PHOENIX_UNARY_RULE
+#undef PHOENIX_BINARY_RULE
+#undef PHOENIX_GRAMMAR
+#undef PHOENIX_UNARY_OPERATORS
+#undef PHOENIX_BINARY_OPERATORS
 
 #endif

Added: sandbox/SOC/2010/phoenix3/boost/phoenix/operator/arithmetic.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator/arithmetic.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2005-2010 Joel de Guzman
+ 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_OPERATOR_ARITHMETIC_HPP
+#define PHOENIX_OPERATOR_ARITHMETIC_HPP
+
+#include <boost/phoenix/core/meta_grammar.hpp>
+
+namespace boost { namespace phoenix
+{
+ PHOENIX_UNARY_OPERATORS(
+ (negate)
+ (unary_plus)
+ (pre_inc)
+ (pre_dec)
+ (post_inc)
+ (post_dec)
+ )
+
+ PHOENIX_BINARY_OPERATORS(
+ (plus_assign)
+ (minus_assign)
+ (multiplies_assign)
+ (divides_assign)
+ (modulus_assign)
+ (plus)
+ (minus)
+ (multiplies)
+ (divides)
+ (modulus)
+ )
+}}
+
+#endif

Added: sandbox/SOC/2010/phoenix3/boost/phoenix/operator/bitwise.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator/bitwise.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -0,0 +1,30 @@
+/*==============================================================================
+ Copyright (c) 2005-2010 Joel de Guzman
+ 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_OPERATOR_BITWISE_HPP
+#define PHOENIX_OPERATOR_BITWISE_HPP
+
+#include <boost/phoenix/core/meta_grammar.hpp>
+
+namespace boost { namespace phoenix
+{
+
+ PHOENIX_BINARY_OPERATORS(
+ (bitwise_and_assign)
+ (bitwise_or_assign)
+ (bitwise_xor_assign)
+ (shift_left_assign)
+ (shift_right_assign)
+ (bitwise_and)
+ (bitwise_or)
+ (bitwise_xor)
+ (shift_left)
+ (shift_right)
+ )
+}}
+
+#endif

Added: sandbox/SOC/2010/phoenix3/boost/phoenix/operator/comparision.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator/comparision.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2005-2010 Joel de Guzman
+ 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_OPERATOR_COMPARISION_HPP
+#define PHOENIX_OPERATOR_COMPARISION_HPP
+
+#include <boost/phoenix/core/meta_grammar.hpp>
+
+namespace boost { namespace phoenix
+{
+
+ PHOENIX_BINARY_OPERATORS(
+ (equal_to)
+ (not_equal_to)
+ (less_equal)
+ (greater_equal)
+ (less)
+ (greater)
+ )
+}}
+
+#endif

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/operator/if_else.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/operator/if_else.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator/if_else.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -5,14 +5,33 @@
     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_OBJECT_IF_ELSE_HPP
-#define PHOENIX_OBJECT_IF_ELSE_HPP
+#ifndef PHOENIX_OPERATOR_IF_ELSE_HPP
+#define PHOENIX_OPERATOR_IF_ELSE_HPP
 
-#include <boost/phoenix/core/compose.hpp>
-#include <boost/utility/result_of.hpp>
+//#include <boost/phoenix/core/compose.hpp>
+//#include <boost/utility/result_of.hpp>
 
 namespace boost { namespace phoenix
 {
+ namespace rule
+ {
+ struct if_else
+ : proto::nary_expr<
+ proto::tag::if_else_
+ , meta_grammar
+ , meta_grammar
+ , meta_grammar>
+ {};
+ }
+
+ template <typename Dummy>
+ struct meta_grammar::case_<proto::tag::if_else_, Dummy>
+ : proto::when<rule::if_else, proto::external_transform>
+ {};
+
+ using proto::if_else;
+
+ /*
     namespace result_of
     {
         template <typename Env, typename Cond, typename Then, typename Else>
@@ -63,6 +82,7 @@
     {
         return make_if_else<Cond, Then, Else>()(cond, then, else_);
     }
+ */
 }}
 
 #endif

Modified: sandbox/SOC/2010/phoenix3/boost/phoenix/operator/io.hpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/boost/phoenix/operator/io.hpp (original)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator/io.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -8,8 +8,8 @@
 #ifndef PHOENIX_OPERATOR_IO_HPP
 #define PHOENIX_OPERATOR_IO_HPP
 
-#include <boost/phoenix/core/actor.hpp>
-#include <boost/phoenix/core/domain.hpp>
+//#include <boost/phoenix/core/actor.hpp>
+//#include <boost/phoenix/core/domain.hpp>
 #include <boost/proto/make_expr.hpp>
 #include <boost/proto/tags.hpp>
 

Added: sandbox/SOC/2010/phoenix3/boost/phoenix/operator/logical.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator/logical.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -0,0 +1,25 @@
+/*==============================================================================
+ Copyright (c) 2005-2010 Joel de Guzman
+ 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_OPERATOR_LOGICAL_HPP
+#define PHOENIX_OPERATOR_LOGICAL_HPP
+
+#include <boost/phoenix/core/meta_grammar.hpp>
+
+namespace boost { namespace phoenix
+{
+
+ PHOENIX_UNARY_OPERATORS(
+ (logical_not)
+ )
+ PHOENIX_BINARY_OPERATORS(
+ (logical_and)
+ (logical_or)
+ )
+}}
+
+#endif

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 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -11,7 +11,7 @@
 #ifndef PHOENIX_OPERATOR_MEMBER_HPP
 #define PHOENIX_OPERATOR_MEMBER_HPP
 
-#include <boost/get_pointer.hpp>
+/*#include <boost/get_pointer.hpp>
 #include <boost/phoenix/core/actor.hpp>
 #include <boost/phoenix/core/compose.hpp>
 #include <boost/phoenix/core/domain.hpp>
@@ -20,10 +20,14 @@
 #include <boost/proto/make_expr.hpp>
 #include <boost/proto/tags.hpp>
 #include <boost/type_traits/is_member_function_pointer.hpp>
-#include <boost/type_traits/is_member_object_pointer.hpp>
+#include <boost/type_traits/is_member_object_pointer.hpp>*/
 
 namespace boost { namespace phoenix
 {
+ PHOENIX_BINARY_OPERATORS(
+ (mem_ptr)
+ )
+ /*
     namespace detail
     {
 
@@ -116,6 +120,7 @@
     {
         return make_mem_obj_ptr<actor<Object>, MemPtr>()(obj, ptr);
     }
+*/
 
 }}
 

Added: sandbox/SOC/2010/phoenix3/boost/phoenix/operator/self.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2010/phoenix3/boost/phoenix/operator/self.hpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -0,0 +1,25 @@
+/*==============================================================================
+ Copyright (c) 2005-2010 Joel de Guzman
+ 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_OPERATOR_SELF_HPP
+#define PHOENIX_OPERATOR_SELF_HPP
+
+#include <boost/phoenix/core/meta_grammar.hpp>
+
+namespace boost { namespace phoenix
+{
+ PHOENIX_UNARY_OPERATORS(
+ (address_of)
+ (dereference)
+ )
+ PHOENIX_BINARY_OPERATORS(
+ (assign)
+ (subscript)
+ )
+}}
+
+#endif

Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/Jamfile
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/Jamfile (original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/Jamfile 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -22,16 +22,16 @@
     ;
 
 test-suite phoenix_operator :
-# [ run operator/arithmetic_tests.cpp ]
-# [ run operator/bitwise_tests.cpp ]
-# [ run operator/comparison_tests.cpp ]
-# [ run operator/if_else_tests.cpp ]
-# [ run operator/io_tests.cpp ]
-# [ run operator/logical_tests.cpp ]
-# [ run operator/misc_binary_tests.cpp ]
-# [ run operator/self_tests.cpp ]
-# [ run operator/unary_tests.cpp ]
-# [ run operator/member.cpp ]
+ [ run operator/arithmetic_tests.cpp ]
+ [ run operator/bitwise_tests.cpp ]
+ [ run operator/comparison_tests.cpp ]
+ [ run operator/if_else_tests.cpp ]
+ [ run operator/io_tests.cpp ]
+ [ run operator/logical_tests.cpp ]
+ [ run operator/misc_binary_tests.cpp ]
+ [ run operator/self_tests.cpp ]
+ [ run operator/unary_tests.cpp ]
+ [ run operator/member.cpp ]
     ;
 
 test-suite phoenix_object :

Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/arithmetic_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/arithmetic_tests.cpp (original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/arithmetic_tests.cpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -39,6 +39,7 @@
     }
 
     {
+ BOOST_TEST((-val(123))() == -123);
         BOOST_TEST((val(123) + 456)() == 123 + 456);
         BOOST_TEST((val(123) - 456)() == 123 - 456);
         BOOST_TEST((val(123) * 456)() == 123 * 456);

Modified: sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/self_tests.cpp
==============================================================================
--- sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/self_tests.cpp (original)
+++ sandbox/SOC/2010/phoenix3/libs/phoenix/test/operator/self_tests.cpp 2010-11-09 07:33:41 EST (Tue, 09 Nov 2010)
@@ -26,7 +26,7 @@
     {
         int x = 123;
         BOOST_TEST((&arg1)(x) == &x);
- BOOST_TEST((*&arg1)(x) == 123);
+ //BOOST_TEST((*&arg1)(x) == 123);
 
         int y = 968;
         (ref(x) = arg1)(y);


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