114 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			114 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								/*==============================================================================
							 | 
						||
| 
								 | 
							
								    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
							 |