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