Update of /cvsroot/boost/boost/boost/xpressive/proto/transform
In directory 
sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv9531/boost/xpressive/proto/transform

Modified Files:
        arg.hpp fold.hpp 
Log Message:
allow meta::binary_expr<mpl::_, Grammar, Grammar> to match any binary 
expression, lambda example supports evaluation of nullary lambdas

Index: arg.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/transform/arg.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- arg.hpp     28 Dec 2006 20:41:26 -0000      1.4
+++ arg.hpp     31 Dec 2006 07:22:13 -0000      1.5
@@ -95,6 +95,45 @@
         }
     };
 
+    // Just return the state
+    template<typename Grammar>
+    struct state
+      : Grammar
+    {
+        template<typename, typename State, typename>
+        struct apply
+        {
+            typedef State type;
+        };
+
+        template<typename Expr, typename State, typename Visitor>
+        static State const &
+        call(Expr const &, State const &state_, Visitor &)
+        {
+            return state_;
+        }
+    };
+
+    // Just return the visitor
+    template<typename Grammar>
+    struct visitor
+      : Grammar
+    {
+        template<typename, typename, typename Visitor>
+        struct apply
+        {
+            typedef Visitor type;
+        };
+
+        template<typename Expr, typename State, typename Visitor>
+        static Visitor &
+        call(Expr const &, State const &, Visitor &visitor_)
+        {
+            return visitor_;
+        }
+    };
+
+
 }}}
 
 #endif

Index: fold.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/proto/transform/fold.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- fold.hpp    28 Dec 2006 20:41:26 -0000      1.3
+++ fold.hpp    31 Dec 2006 07:22:13 -0000      1.4
@@ -25,13 +25,13 @@
     {
         fold();
 
-        typedef typename Grammar::type grammar_type;
-        typedef typename grammar_type::arg0_type left_grammar;
-        typedef typename grammar_type::arg1_type right_grammar;
-
         template<typename Expr, typename State, typename Visitor>
         struct apply
         {
+            typedef typename Grammar::type grammar_type;
+            typedef typename grammar_type::arg0_type left_grammar;
+            typedef typename grammar_type::arg1_type right_grammar;
+
             typedef typename proto::meta::left<Expr>::type left_expr;
             typedef typename proto::meta::right<Expr>::type right_expr;
 
@@ -46,6 +46,10 @@
         static typename apply<Expr, State, Visitor>::type
         call(Expr const &expr, State const &state, Visitor &visitor)
         {
+            typedef typename Grammar::type grammar_type;
+            typedef typename grammar_type::arg0_type left_grammar;
+            typedef typename grammar_type::arg1_type right_grammar;
+
             return right_grammar::call(
                 proto::right(expr)
               , left_grammar::call(proto::left(expr), state, visitor)
@@ -62,13 +66,13 @@
     {
         reverse_fold();
 
-        typedef typename Grammar::type grammar_type;
-        typedef typename grammar_type::arg0_type left_grammar;
-        typedef typename grammar_type::arg1_type right_grammar;
-
         template<typename Expr, typename State, typename Visitor>
         struct apply
         {
+            typedef typename Grammar::type grammar_type;
+            typedef typename grammar_type::arg0_type left_grammar;
+            typedef typename grammar_type::arg1_type right_grammar;
+
             typedef typename proto::meta::left<Expr>::type left_expr;
             typedef typename proto::meta::right<Expr>::type right_expr;
 
@@ -83,6 +87,10 @@
         static typename apply<Expr, State, Visitor>::type
         call(Expr const &expr, State const &state, Visitor &visitor)
         {
+            typedef typename Grammar::type grammar_type;
+            typedef typename grammar_type::arg0_type left_grammar;
+            typedef typename grammar_type::arg1_type right_grammar;
+
             return left_grammar::call(
                 proto::left(expr)
               , right_grammar::call(proto::right(expr), state, visitor)


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to