annotate DEPENDENCIES/generic/include/boost/phoenix/core/expression.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1
Chris@16 2 #if !BOOST_PHOENIX_IS_ITERATING
Chris@16 3
Chris@16 4 #ifndef BOOST_PHOENIX_CORE_EXPRESSION_HPP
Chris@16 5 #define BOOST_PHOENIX_CORE_EXPRESSION_HPP
Chris@16 6
Chris@16 7 #include <boost/phoenix/core/limits.hpp>
Chris@16 8 #include <boost/call_traits.hpp>
Chris@16 9 #include <boost/fusion/sequence/intrinsic/at.hpp>
Chris@16 10 #include <boost/phoenix/core/as_actor.hpp>
Chris@16 11 #include <boost/phoenix/core/detail/expression.hpp>
Chris@16 12 #include <boost/phoenix/core/domain.hpp>
Chris@16 13 #include <boost/phoenix/support/iterate.hpp>
Chris@16 14 #include <boost/preprocessor/comparison/equal.hpp>
Chris@16 15 #include <boost/proto/domain.hpp>
Chris@16 16 #include <boost/proto/make_expr.hpp>
Chris@16 17 #include <boost/proto/transform/pass_through.hpp>
Chris@16 18
Chris@16 19 #if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
Chris@16 20
Chris@16 21 #include <boost/phoenix/core/preprocessed/expression.hpp>
Chris@16 22
Chris@16 23 #else
Chris@16 24
Chris@16 25 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
Chris@16 26 #pragma wave option(preserve: 2, line: 0, output: "preprocessed/expression_" BOOST_PHOENIX_LIMIT_STR ".hpp")
Chris@16 27 #endif
Chris@16 28
Chris@16 29 /*=============================================================================
Chris@16 30 Copyright (c) 2005-2010 Joel de Guzman
Chris@16 31 Copyright (c) 2010 Eric Niebler
Chris@16 32 Copyright (c) 2010 Thomas Heller
Chris@16 33
Chris@16 34 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 35 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 36 ==============================================================================*/
Chris@16 37
Chris@16 38 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
Chris@16 39 #pragma wave option(preserve: 1)
Chris@16 40 #endif
Chris@16 41
Chris@16 42 namespace boost { namespace phoenix
Chris@16 43 {
Chris@16 44 template <typename Expr> struct actor;
Chris@16 45
Chris@16 46 template <
Chris@16 47 template <typename> class Actor
Chris@16 48 , typename Tag
Chris@16 49 , BOOST_PHOENIX_typename_A_void(BOOST_PHOENIX_COMPOSITE_LIMIT)
Chris@16 50 , typename Dummy = void>
Chris@16 51 struct expr_ext;
Chris@16 52
Chris@16 53 template <
Chris@16 54 typename Tag
Chris@16 55 , BOOST_PHOENIX_typename_A_void(BOOST_PHOENIX_COMPOSITE_LIMIT)
Chris@16 56 , typename Dummy = void
Chris@16 57 >
Chris@16 58 struct expr : expr_ext<actor, Tag, BOOST_PHOENIX_A(BOOST_PHOENIX_COMPOSITE_LIMIT)> {};
Chris@16 59
Chris@16 60 #define M0(Z, N, D) \
Chris@16 61 BOOST_PP_COMMA_IF(N) \
Chris@16 62 typename proto::detail::uncvref<typename call_traits<BOOST_PP_CAT(A, N)>::value_type>::type
Chris@16 63
Chris@16 64 #define M1(Z, N, D) \
Chris@16 65 BOOST_PP_COMMA_IF(N) typename call_traits<BOOST_PP_CAT(A, N)>::param_type BOOST_PP_CAT(a, N)
Chris@16 66
Chris@16 67 #define BOOST_PHOENIX_ITERATION_PARAMS \
Chris@16 68 (3, (1, BOOST_PHOENIX_COMPOSITE_LIMIT, \
Chris@16 69 <boost/phoenix/core/expression.hpp>)) \
Chris@16 70 /**/
Chris@16 71 #include BOOST_PHOENIX_ITERATE()
Chris@16 72
Chris@16 73 #undef M0
Chris@16 74 #undef M1
Chris@16 75
Chris@16 76 }}
Chris@16 77
Chris@16 78 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
Chris@16 79 #pragma wave option(output: null)
Chris@16 80 #endif
Chris@16 81
Chris@16 82 #endif // PHOENIX_DONT_USE_PREPROCESSED_FILES
Chris@16 83
Chris@16 84 #endif
Chris@16 85
Chris@16 86 #else
Chris@16 87 template <template <typename> class Actor, typename Tag, BOOST_PHOENIX_typename_A>
Chris@16 88 struct expr_ext<Actor, Tag, BOOST_PHOENIX_A>
Chris@16 89 : proto::transform<expr_ext<Actor, Tag, BOOST_PHOENIX_A>, int>
Chris@16 90 {
Chris@16 91 typedef
Chris@16 92 typename proto::result_of::make_expr<
Chris@16 93 Tag
Chris@101 94 , phoenix_default_domain //proto::basic_default_domain
Chris@16 95 , BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M0, _)
Chris@16 96 >::type
Chris@16 97 base_type;
Chris@16 98
Chris@16 99 typedef Actor<base_type> type;
Chris@16 100
Chris@16 101 typedef
Chris@16 102 typename proto::nary_expr<Tag, BOOST_PHOENIX_A>::proto_grammar
Chris@16 103 proto_grammar;
Chris@16 104
Chris@16 105 static type make(BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M1, _))
Chris@101 106 { //?? actor or Actor??
Chris@101 107 //Actor<base_type> const e =
Chris@101 108 actor<base_type> const e =
Chris@16 109 {
Chris@16 110 proto::make_expr<
Chris@16 111 Tag
Chris@101 112 , phoenix_default_domain // proto::basic_default_domain
Chris@16 113 >(BOOST_PHOENIX_a)
Chris@16 114 };
Chris@16 115 return e;
Chris@16 116 }
Chris@16 117
Chris@16 118 template<typename Expr, typename State, typename Data>
Chris@16 119 struct impl
Chris@16 120 : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
Chris@16 121 {};
Chris@16 122
Chris@16 123 typedef Tag proto_tag;
Chris@16 124 #define BOOST_PHOENIX_ENUM_CHILDREN(_, N, __) \
Chris@16 125 typedef BOOST_PP_CAT(A, N) BOOST_PP_CAT(proto_child, N); \
Chris@16 126 /**/
Chris@16 127 BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, BOOST_PHOENIX_ENUM_CHILDREN, _)
Chris@16 128 #undef BOOST_PHOENIX_ENUM_CHILDREN
Chris@16 129 };
Chris@16 130
Chris@16 131 #endif