File indexing completed on 2025-01-18 09:47:40
0001
0002 #if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
0003 #ifndef BOOST_PHOENIX_STATEMENT_DETAIL_TRY_CATCH_EVAL_HPP
0004 #define BOOST_PHOENIX_STATEMENT_DETAIL_TRY_CATCH_EVAL_HPP
0005
0006 #include <boost/phoenix/support/iterate.hpp>
0007
0008 #include <boost/phoenix/statement/detail/preprocessed/try_catch_eval.hpp>
0009
0010 #endif
0011 #else
0012
0013 #if !BOOST_PHOENIX_IS_ITERATING
0014
0015 #ifndef BOOST_PHOENIX_STATEMENT_DETAIL_TRY_CATCH_EVAL_HPP
0016 #define BOOST_PHOENIX_STATEMENT_DETAIL_TRY_CATCH_EVAL_HPP
0017
0018 #include <boost/phoenix/support/iterate.hpp>
0019
0020 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
0021 #pragma wave option(preserve: 2, line: 0, output: "preprocessed/try_catch_eval_" BOOST_PHOENIX_LIMIT_STR ".hpp")
0022 #endif
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
0033 #pragma wave option(preserve: 1)
0034 #endif
0035
0036 #define BOOST_PHOENIX_TRY_CATCH_EVAL_R(Z, N, DATA) \
0037 catch( \
0038 typename proto::result_of::value< \
0039 typename proto::result_of::child_c< \
0040 BOOST_PP_CAT(A, N) \
0041 , 0 \
0042 >::type \
0043 >::type::type &e \
0044 ) \
0045 { \
0046 eval_catch_body(BOOST_PP_CAT(a, N), e, ctx); \
0047 } \
0048
0049
0050
0051 #define BOOST_PHOENIX_ITERATION_PARAMS \
0052 (3, (1, BOOST_PHOENIX_CATCH_LIMIT, \
0053 <boost/phoenix/statement/detail/try_catch_eval.hpp>))
0054 #include BOOST_PHOENIX_ITERATE()
0055
0056 #undef BOOST_PHOENIX_TRY_CATCH_EVAL_R
0057
0058 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
0059 #pragma wave option(output: null)
0060 #endif
0061
0062 #endif
0063
0064 #else
0065
0066 template <typename Try, BOOST_PHOENIX_typename_A, typename Context>
0067 typename boost::enable_if<
0068 proto::matches<
0069 BOOST_PP_CAT(A, BOOST_PP_DEC(BOOST_PHOENIX_ITERATION))
0070 , rule::catch_
0071 >
0072 , result_type
0073 >::type
0074 operator()(Try const & try_, BOOST_PHOENIX_A_const_ref_a, Context const & ctx
0075 BOOST_PHOENIX_SFINAE_AND_OVERLOADS) const
0076 {
0077 try
0078 {
0079 boost::phoenix::eval(proto::child_c<0>(try_), ctx);
0080 }
0081 BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, BOOST_PHOENIX_TRY_CATCH_EVAL_R, _)
0082 }
0083
0084 template <typename Try, BOOST_PHOENIX_typename_A, typename Context>
0085 typename boost::disable_if<
0086 proto::matches<
0087 BOOST_PP_CAT(A, BOOST_PP_DEC(BOOST_PHOENIX_ITERATION))
0088 , rule::catch_
0089 >
0090 , result_type
0091 >::type
0092 operator()(Try const & try_, BOOST_PHOENIX_A_const_ref_a, Context const & ctx) const
0093 {
0094 try
0095 {
0096 boost::phoenix::eval(proto::child_c<0>(try_), ctx);
0097 }
0098 BOOST_PP_REPEAT(
0099 BOOST_PP_DEC(BOOST_PHOENIX_ITERATION)
0100 , BOOST_PHOENIX_TRY_CATCH_EVAL_R, _
0101 )
0102 catch(...)
0103 {
0104 boost::phoenix::eval(
0105 proto::child_c<0>(
0106 BOOST_PP_CAT(a, BOOST_PP_DEC(BOOST_PHOENIX_ITERATION))
0107 )
0108 , ctx);
0109 }
0110 }
0111
0112 #endif
0113
0114 #endif