12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // (C) Copyright David Abrahams 2000.
- // 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)
- //
- // The author gratefully acknowleges the support of Dragon Systems, Inc., in
- // producing this work.
- #ifndef ERRORS_DWA052500_H_
- # define ERRORS_DWA052500_H_
- # include <boost/python/detail/prefix.hpp>
- # include <boost/function/function0.hpp>
- namespace boost { namespace python {
- struct BOOST_PYTHON_DECL error_already_set
- {
- virtual ~error_already_set();
- };
- // Handles exceptions caught just before returning to Python code.
- // Returns true iff an exception was caught.
- BOOST_PYTHON_DECL bool handle_exception_impl(function0<void>);
- template <class T>
- bool handle_exception(T f)
- {
- return handle_exception_impl(function0<void>(boost::ref(f)));
- }
- namespace detail { inline void rethrow() { throw; } }
- inline void handle_exception()
- {
- handle_exception(detail::rethrow);
- }
- BOOST_PYTHON_DECL void throw_error_already_set();
- template <class T>
- inline T* expect_non_null(T* x)
- {
- if (x == 0)
- throw_error_already_set();
- return x;
- }
- // Return source if it is an instance of pytype; throw an appropriate
- // exception otherwise.
- BOOST_PYTHON_DECL PyObject* pytype_check(PyTypeObject* pytype, PyObject* source);
- }} // namespace boost::python
- #endif // ERRORS_DWA052500_H_
|