123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /*==============================================================================
- Copyright (c) 2005-2007 Dan Marsden
- Copyright (c) 2005-2010 Joel de Guzman
- Copyright (c) 2010 Thomas Heller
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- ==============================================================================*/
- #ifndef BOOST_PHOENIX_STATEMENT_THROW_HPP
- #define BOOST_PHOENIX_STATEMENT_THROW_HPP
- #include <boost/phoenix/core/limits.hpp>
- #include <boost/phoenix/core/actor.hpp>
- #include <boost/phoenix/core/call.hpp>
- #include <boost/phoenix/core/meta_grammar.hpp>
- #include <boost/phoenix/core/expression.hpp>
- #include <boost/phoenix/core/terminal.hpp>
- #include <boost/phoenix/core/value.hpp>
- namespace boost { namespace phoenix
- {
- namespace tag
- {
- struct throw_ {};
- }
- namespace expression
- {
- template <typename A>
- struct throw_
- : expr<tag::throw_, A>
- {};
- }
- namespace rule
- {
- struct throw_
- : expression::throw_<meta_grammar>
- {};
- }
- template <typename Dummy>
- struct meta_grammar::case_<tag::throw_, Dummy>
- : enable_rule<rule::throw_, Dummy>
- {};
- struct throw_eval
- {
- typedef void result_type;
- template <typename ThrowExpr, typename Context>
- result_type
- operator()(ThrowExpr const& throw_expr, Context const & ctx) const
- {
- throw boost::phoenix::eval(throw_expr, ctx);
- }
- };
-
- template <typename Dummy>
- struct default_actions::when<rule::throw_, Dummy>
- : call<throw_eval>
- {};
- template <typename ThrowExpr>
- inline
- typename expression::throw_<ThrowExpr>::type const
- throw_(ThrowExpr const& throw_expr)
- {
- return expression::throw_<ThrowExpr>::make(throw_expr);
- }
-
- namespace detail
- {
- struct rethrow {};
- }
-
- namespace expression
- {
- struct rethrow
- : expression::value<detail::rethrow>
- {};
- }
-
- template<typename Dummy>
- struct is_custom_terminal<detail::rethrow, Dummy>
- : mpl::true_
- {};
- template<typename Dummy>
- struct custom_terminal<detail::rethrow, Dummy>
- {
- typedef void result_type;
- //#ifndef BOOST_PHOENIX_NO_SPECIALIZE_CUSTOM_TERMINAL
- typedef void _is_throw_custom_terminal; // fix for #7730
- //#endif
- template <typename Context>
- void operator()(detail::rethrow, Context &) const
- {
- throw;
- }
- };
- inline
- expression::rethrow::type const
- throw_()
- {
- return expression::rethrow::make(detail::rethrow());
- }
- }}
- #endif
|