Factored some #ifdef noise out of the initialization function by adding
SwigPyBuiltin_SetMetaType. For %import statements, move the runtime import out of SWIG_init and into the .py file. The reason for this is that the import must be executed within the python execution frame of the module, which is true in the .py file, but *not* true in the initialization function. Had to re-order the .py file slightly to put the 'import' statements at the top; that's necessary to make sure base types from an imported module are initialized first. If -builtin isn't used, then the .py code is not re-ordered. Added an explanation and workaround for the limitation that wrapped types are not raise-able. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/szager-python-builtin@12585 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
960b503a72
commit
cd7fc2047b
4 changed files with 83 additions and 49 deletions
|
|
@ -409,3 +409,13 @@ SwigPyBuiltin_ThisClosure (PyObject *self, void *closure) {
|
|||
Py_XINCREF(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
SWIGINTERN void
|
||||
SwigPyBuiltin_SetMetaType (PyTypeObject *type, PyTypeObject *metatype)
|
||||
{
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
type->ob_base.ob_base.ob_type = metatype;
|
||||
#else
|
||||
type->ob_type = metatype;
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -355,9 +355,6 @@ SWIG_init(void) {
|
|||
Py_DECREF(metatype_args);
|
||||
metatype->tp_setattro = (setattrofunc) &SwigPyObjectType_setattro;
|
||||
assert(PyType_Ready(metatype) >= 0);
|
||||
|
||||
SWIG_Python_builtin_imports();
|
||||
|
||||
#endif
|
||||
|
||||
/* Fix SwigMethods to carry the callback ptrs when needed */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue