/Src/Dependencies/Boost/boost/spirit/home/phoenix/statement/detail/catch_eval.hpp

http://hadesmem.googlecode.com/ · C++ Header · 79 lines · 54 code · 18 blank · 7 comment · 2 complexity · aaa00c2f34e8ba6c9d6032786d0dc7ca MD5 · raw file

  1. /*=============================================================================
  2. Copyright (c) 2005-2007 Dan Marsden
  3. Copyright (c) 2005-2007 Joel de Guzman
  4. Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. ==============================================================================*/
  7. #ifndef BOOST_PP_IS_ITERATING
  8. #ifndef PHOENIX_STATEMENT_DETAIL_CATCH_EVAL_HPP
  9. #define PHOENIX_STATEMENT_DETAIL_CATCH_EVAL_HPP
  10. #include <boost/spirit/home/phoenix/core/limits.hpp>
  11. #include <boost/preprocessor/iteration/iterate.hpp>
  12. #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
  13. #include <boost/preprocessor/repetition/enum_params_with_defaults.hpp>
  14. #include <boost/preprocessor/repetition/enum_params.hpp>
  15. #include <boost/preprocessor/repetition/enum_binary_params.hpp>
  16. #include <boost/preprocessor/repetition/repeat.hpp>
  17. #include <boost/preprocessor/dec.hpp>
  18. #include <boost/preprocessor/cat.hpp>
  19. #include <boost/mpl/void.hpp>
  20. namespace boost { namespace phoenix {
  21. class catch_eval
  22. {
  23. public:
  24. template<typename Env, typename TryBody,
  25. BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(PHOENIX_CATCH_LIMIT, typename CatchBody, mpl::void_)>
  26. struct result
  27. {
  28. typedef void type;
  29. };
  30. #define BOOST_PP_ITERATION_PARAMS_1 \
  31. (3, (1, PHOENIX_CATCH_LIMIT, "boost/spirit/home/phoenix/statement/detail/catch_eval.hpp"))
  32. #include BOOST_PP_ITERATE()
  33. };
  34. }}
  35. #endif
  36. #elif BOOST_PP_ITERATION_DEPTH() == 1
  37. #define PHOENIX_ITERATION BOOST_PP_ITERATION()
  38. template<typename Rt, typename Env, typename TryBody,
  39. BOOST_PP_ENUM_PARAMS(PHOENIX_ITERATION, typename CatchBody)>
  40. static void eval(
  41. const Env& env, TryBody& tryBody,
  42. BOOST_PP_ENUM_BINARY_PARAMS(PHOENIX_ITERATION, CatchBody, catchBody))
  43. {
  44. try
  45. {
  46. tryBody.eval(env);
  47. }
  48. #define BOOST_PP_ITERATION_PARAMS_2 \
  49. (3, (0, BOOST_PP_DEC(PHOENIX_ITERATION), "boost/spirit/home/phoenix/statement/detail/catch_eval.hpp"))
  50. #include BOOST_PP_ITERATE()
  51. }
  52. #undef PHOENIX_ITERATION
  53. #elif BOOST_PP_ITERATION_DEPTH() == 2
  54. #define PHOENIX_ITERATION BOOST_PP_ITERATION()
  55. catch(typename BOOST_PP_CAT(CatchBody, PHOENIX_ITERATION)::exception_type&)
  56. {
  57. BOOST_PP_CAT(catchBody, PHOENIX_ITERATION).eval(env);
  58. }
  59. #undef PHOENIX_ITERATION
  60. #endif