GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — python/src/errors.cpp at develop · ssam18/python Expand file tree/ Copy patherrors.cppMore file actions 105 lines (90 loc) · 2.37 KB / Copy patherrors.cppFile metadata and controls105 lines (90 loc) · 2.37 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 // Copyright David Abrahams 2001. // 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_PYTHON_SOURCE # define BOOST_PYTHON_SOURCE #endif #include <boost/python/errors.hpp> #include <boost/cast.hpp> #include <boost/python/detail/exception_handler.hpp> namespace boost { namespace python { error_already_set::~error_already_set() {} // IMPORTANT: this function may only be called from within a catch block! BOOST_PYTHON_DECL bool handle_exception_impl(function0<void> f) { try { if (detail::exception_handler::chain) return detail::exception_handler::chain->handle(f); f(); return false; } catch(const boost::python::error_already_set&) { // The python error reporting has already been handled. } catch(const std::bad_alloc&) { PyErr_NoMemory(); } catch(const bad_numeric_cast& x) { PyErr_SetString(PyExc_OverflowError, x.what()); } catch(const std::out_of_range& x) { PyErr_SetString(PyExc_IndexError, x.what()); } catch(const std::invalid_argument& x) { PyErr_SetString(PyExc_ValueError, x.what()); } catch(const std::exception& x) { PyErr_SetString(PyExc_RuntimeError, x.what()); } catch(...) { PyErr_SetString(PyExc_RuntimeError, "unidentifiable C++ exception"); } return true; } void BOOST_PYTHON_DECL throw_error_already_set() { throw error_already_set(); } namespace detail { bool exception_handler::operator()(function0<void> const& f) const { if (m_next) { return m_next->handle(f); } else { f(); return false; } } exception_handler::exception_handler(handler_function const& impl) : m_impl(impl) , m_next(0) { if (chain != 0) tail->m_next = this; else chain = this; tail = this; } exception_handler* exception_handler::chain; exception_handler* exception_handler::tail; BOOST_PYTHON_DECL void register_exception_handler(handler_function const& f) { // the constructor links the new object into a handler chain, so // this object isn't actaully leaked (until, of course, the // interpreter exits). new exception_handler(f); } } // namespace boost::python::detail }} // namespace boost::python |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |