$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: eric_at_[hidden]
Date: 2007-12-31 12:48:06
Author: eric_niebler
Date: 2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
New Revision: 42391
URL: http://svn.boost.org/trac/boost/changeset/42391
Log:
all proto tests and examples work on vc8, some work on vc7.1
Text files modified: 
   branches/proto/v3/boost/xpressive/proto/args.hpp           |    18 ++++--------------                      
   branches/proto/v3/boost/xpressive/proto/context/null.hpp   |     2 +-                                      
   branches/proto/v3/boost/xpressive/proto/debug.hpp          |     2 +-                                      
   branches/proto/v3/boost/xpressive/proto/detail/arg_c.hpp   |     4 ++--                                    
   branches/proto/v3/boost/xpressive/proto/detail/when.hpp    |    10 +++++-----                              
   branches/proto/v3/boost/xpressive/proto/expr.hpp           |     2 +-                                      
   branches/proto/v3/boost/xpressive/proto/matches.hpp        |     5 +++++                                   
   branches/proto/v3/boost/xpressive/proto/transform/when.hpp |     3 ++-                                     
   branches/proto/v3/libs/xpressive/proto/test/toy_spirit.cpp |    10 ++++++++--                              
   9 files changed, 29 insertions(+), 27 deletions(-)
Modified: branches/proto/v3/boost/xpressive/proto/args.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/args.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/args.hpp	2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
@@ -22,12 +22,13 @@
 
         namespace argsns_
         {
+            typedef int nil;
 
             template<>
             struct args<>
             {
                 BOOST_STATIC_CONSTANT(long, size = 0);
-                typedef cons<> cons_type;
+                typedef nil cons_type;
             };
 
             template<typename A>
@@ -41,14 +42,6 @@
                 typedef A back_;
             };
 
-            template<>
-            struct cons<>
-            {
-                BOOST_STATIC_CONSTANT(long, size = 0);
-                typedef void car_type;
-                typedef void cdr_type;
-            };
-
         #define LBRACE(Z, N, DATA) {
         #define RBRACE(Z, N, DATA) }
         #define CDR_TYPE(Z, N, DATA) ::cdr_type
@@ -166,14 +159,11 @@
             BOOST_PP_REPEAT(BOOST_PP_DEC(N), CAR, BOOST_PP_DEC(N))
             typedef BOOST_PP_CAT(A, BOOST_PP_DEC(N)) car_type;
             car_type car;
-            static cons<> const cdr;
-            typedef cons<> cdr_type;
+            enum dummy_ { cdr = 0 };
+            typedef nil cdr_type;
             BOOST_PP_REPEAT(BOOST_PP_DEC(N), CDR, BOOST_PP_DEC(N))
         };
 
-        template< BOOST_PP_ENUM_PARAMS(N, typename A) >
-        cons<> const cons< BOOST_PP_ENUM_PARAMS(N, A) > BOOST_PP_REPEAT(BOOST_PP_DEC(N), CDR_TYPE, ~) ::cdr = {};
-
         #if N > 1
         template<typename Cons BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A) >
         inline Cons make_cons_(BOOST_PP_ENUM_BINARY_PARAMS(N, A, &a))
Modified: branches/proto/v3/boost/xpressive/proto/context/null.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/context/null.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/context/null.hpp	2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
@@ -32,7 +32,7 @@
             }
 
         private:
-            static void call_(argsns_::cons<> const &, Context &)
+            static void call_(argsns_::nil, Context &)
             {}
 
             template<typename Cons>
Modified: branches/proto/v3/boost/xpressive/proto/debug.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/debug.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/debug.hpp	2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
@@ -151,7 +151,7 @@
             }
 
         private:
-            static void call_(display_expr &, argsns_::cons<> const &)
+            static void call_(display_expr &, argsns_::nil)
             {}
 
             template<typename Cons>
Modified: branches/proto/v3/boost/xpressive/proto/detail/arg_c.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/detail/arg_c.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/detail/arg_c.hpp	2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
@@ -27,7 +27,7 @@
             template<typename Cons, long N>
             struct value_at_c;
 
-        #define CDR_TYPE(Z, N, DATA) ::cdr_type
+        #define CDR_TYPE(Z, N, DATA) ::BOOST_PP_CAT(S, N)
         #define CDR(Z, N, DATA) .cdr
 
         #ifdef BOOST_HAS_VARIADIC_TMPL
@@ -46,7 +46,7 @@
             template<typename Cons, long N>
             struct arg_cv
             {
-                typedef arg_c<typename Cons BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, CDR_TYPE, ~), N-BOOST_PROTO_MAX_ARITY> base_type;
+                typedef arg_cv<typename Cons BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, CDR_TYPE, ~), N-BOOST_PROTO_MAX_ARITY> base_type;
                 typedef typename base_type::type type;
 
                 static type call(Cons const &args)
Modified: branches/proto/v3/boost/xpressive/proto/detail/when.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/detail/when.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/detail/when.hpp	2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
@@ -10,16 +10,16 @@
     #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PROTO_MAX_ARITY, <boost/xpressive/proto/detail/when.hpp>))
     #include BOOST_PP_ITERATE()
 
+    template<typename Grammar, typename Fun>
+    struct when<Grammar, Fun *>
+      : when<Grammar, Fun>
+    {};
+
 #else
 
     #define N BOOST_PP_ITERATION()
 
     template<typename Grammar, typename Return BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
-    struct when<Grammar, Return(*)(BOOST_PP_ENUM_PARAMS(N, A))>
-      : when<Grammar, Return(BOOST_PP_ENUM_PARAMS(N, A))>
-    {};
-
-    template<typename Grammar, typename Return BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
     struct when<Grammar, Return(BOOST_PP_ENUM_PARAMS(N, A))>
       : callable, detail::vararg_if<Grammar>
     {
Modified: branches/proto/v3/boost/xpressive/proto/expr.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/expr.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/expr.hpp	2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
@@ -227,7 +227,7 @@
         /// construct
         ///
         template<typename Expr, typename A>
-        inline Expr construct(A const &a, typename boost::disable_if<is_function<A> >::type * = 0)
+        inline Expr construct(A const &a, typename boost::disable_if<is_function<A> >::type *)
         {
             typedef typename Expr::proto_args::cons_type cons_type;
             Expr that = {proto::argsns_::make_cons_<cons_type>(a)};
Modified: branches/proto/v3/boost/xpressive/proto/matches.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/matches.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/matches.hpp	2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
@@ -157,6 +157,11 @@
               : array_matches<T[M], U>
             {};
 
+            template<typename T, std::size_t M>
+            struct lambda_matches<T[M], T[M] BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(-1)>
+              : mpl::true_
+            {};
+
             // How terminal_matches<> handles references and cv-qualifiers.
             // The cv and ref matter *only* if the grammar has a top-level ref.
             //
Modified: branches/proto/v3/boost/xpressive/proto/transform/when.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/transform/when.hpp	(original)
+++ branches/proto/v3/boost/xpressive/proto/transform/when.hpp	2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
@@ -14,6 +14,7 @@
 #include <boost/xpressive/proto/traits.hpp>
 #include <boost/xpressive/proto/transform/call.hpp>
 #include <boost/xpressive/proto/transform/make.hpp>
+#include <boost/function_types/is_function_pointer.hpp>
 
 namespace boost { namespace proto { namespace transform
 {
@@ -34,7 +35,7 @@
     // Simple transform, takes a raw transform and
     // applies it directly.
     template<typename Grammar, typename Fun>
-    struct when 
+    struct when
       : Fun, detail::vararg_if<Grammar>
     {
         typedef typename Grammar::proto_base_expr proto_base_expr;
Modified: branches/proto/v3/libs/xpressive/proto/test/toy_spirit.cpp
==============================================================================
--- branches/proto/v3/libs/xpressive/proto/test/toy_spirit.cpp	(original)
+++ branches/proto/v3/libs/xpressive/proto/test/toy_spirit.cpp	2007-12-31 12:48:05 EST (Mon, 31 Dec 2007)
@@ -197,16 +197,22 @@
         // The visitor determines the case-sensitivity of the terminals
         typedef _visitor _icase;
 
+        // Ugh, would be nice to find a work-around for this:
+        #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+        #define _arg(x) call<_arg(x)>
+        #define True() make<True()>
+        #endif
+
         // Extract the arg from terminals
         struct SpiritTerminal
           : or_<
                 when< AnyChar,          _arg >
               , when< CharLiteral,      if_<_icase, ichar(_arg), _arg> >
-              , when< CharParser,       if_<_icase, ichar(_arg(_arg1)), _arg(_arg1)> > // char_('a')
+              , when< CharParser,       if_<_icase, ichar(_arg(_arg1)), _arg(_arg1)> >  // char_('a')
               , when< NTBSLiteral,      if_<_icase, istr(_arg), char const*(_arg)> >
               , when< CharRangeParser,  if_<_icase
                                             , ichar_range(_arg(_arg1), _arg(_arg2))
-                                            , char_range(_arg(_arg1), _arg(_arg2))> >// char_('a','z')
+                                            , char_range(_arg(_arg1), _arg(_arg2))> >   // char_('a','z')
             >
         {};