mirror of
https://github.com/boostorg/python.git
synced 2026-01-22 17:32:55 +00:00
New-style polymorphism
[SVN r24083]
This commit is contained in:
65
src/wrapper.cpp
Executable file
65
src/wrapper.cpp
Executable file
@@ -0,0 +1,65 @@
|
||||
// Copyright David Abrahams 2004. 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)
|
||||
|
||||
#include <boost/python/wrapper.hpp>
|
||||
|
||||
namespace boost { namespace python {
|
||||
|
||||
namespace detail
|
||||
{
|
||||
override wrapper_base::get_override(
|
||||
char const* name
|
||||
, PyTypeObject* class_object
|
||||
) const
|
||||
{
|
||||
if (this->m_self)
|
||||
{
|
||||
if (handle<> m = handle<>(
|
||||
python::allow_null(
|
||||
::PyObject_GetAttrString(
|
||||
this->m_self, const_cast<char*>(name))))
|
||||
)
|
||||
{
|
||||
PyObject* borrowed_f = 0;
|
||||
|
||||
if (
|
||||
PyMethod_Check(m.get())
|
||||
&& ((PyMethodObject*)m.get())->im_self == this->m_self
|
||||
&& class_object->tp_dict != 0
|
||||
)
|
||||
{
|
||||
borrowed_f = ::PyDict_GetItemString(class_object->tp_dict, name);
|
||||
|
||||
|
||||
}
|
||||
if (borrowed_f != ((PyMethodObject*)m.get())->im_func)
|
||||
return override(m);
|
||||
}
|
||||
}
|
||||
return override(handle<>(detail::none()));
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
namespace converter
|
||||
{
|
||||
PyObject* BOOST_PYTHON_DECL do_polymorphic_ref_to_python(
|
||||
python::detail::wrapper_base const volatile* x, type_info src
|
||||
)
|
||||
{
|
||||
if (x == 0)
|
||||
{
|
||||
::PyErr_Format(
|
||||
PyExc_TypeError
|
||||
, "Attempting to returning pointer or reference to instance of %s\n"
|
||||
"for which no corresponding Python object exists. Wrap this function"
|
||||
"with a return return value policy"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
}} // namespace boost::python::detail
|
||||
Reference in New Issue
Block a user