Blame view

3rdparty/boost_1_81_0/libs/python/src/wrapper.cpp 1.71 KB
73ef4ff3   Hu Chunming   提交三方库
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
  // 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())
                    && PyMethod_GET_SELF(m.get()) == this->m_self
                    && class_object->tp_dict != 0
                )
                {
                    borrowed_f = ::PyDict_GetItemString(
                        class_object->tp_dict, const_cast<char*>(name));
  
  
                }
                if (borrowed_f != PyMethod_GET_FUNCTION(m.get()))
                    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