Commit 1f700974 authored by Stefan Behnel's avatar Stefan Behnel

move [GS]etVTable utility code to more appropriate ImportExport.c file

parent 74924957
...@@ -2397,7 +2397,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -2397,7 +2397,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
code.error_goto_if_null(type.typeptr_cname, pos)) code.error_goto_if_null(type.typeptr_cname, pos))
if type.vtabptr_cname: if type.vtabptr_cname:
code.globalstate.use_utility_code( code.globalstate.use_utility_code(
UtilityCode.load_cached('GetVTable', 'ExtensionTypes.c')) UtilityCode.load_cached('GetVTable', 'ImportExport.c'))
code.putln("%s = (struct %s*)__Pyx_GetVtable(%s->tp_dict); %s" % ( code.putln("%s = (struct %s*)__Pyx_GetVtable(%s->tp_dict); %s" % (
type.vtabptr_cname, type.vtabptr_cname,
type.vtabstruct_cname, type.vtabstruct_cname,
...@@ -2503,7 +2503,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -2503,7 +2503,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
type.vtabptr_cname, type.vtabptr_cname,
code.error_goto(entry.pos))) code.error_goto(entry.pos)))
code.globalstate.use_utility_code( code.globalstate.use_utility_code(
UtilityCode.load_cached('SetVTable', 'ExtensionTypes.c')) UtilityCode.load_cached('SetVTable', 'ImportExport.c'))
if not type.scope.is_internal and not type.scope.directives['internal']: if not type.scope.is_internal and not type.scope.directives['internal']:
# scope.is_internal is set for types defined by # scope.is_internal is set for types defined by
# Cython (such as closures), the 'internal' # Cython (such as closures), the 'internal'
......
...@@ -51,52 +51,3 @@ static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) { ...@@ -51,52 +51,3 @@ static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) {
if (type && type->tp_clear) if (type && type->tp_clear)
type->tp_clear(obj); type->tp_clear(obj);
} }
/////////////// SetVTable.proto ///////////////
static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
/////////////// SetVTable ///////////////
static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
if (!ob)
goto bad;
if (PyDict_SetItem(dict, PYIDENT("__pyx_vtable__"), ob) < 0)
goto bad;
Py_DECREF(ob);
return 0;
bad:
Py_XDECREF(ob);
return -1;
}
/////////////// GetVTable.proto ///////////////
static void* __Pyx_GetVtable(PyObject *dict); /*proto*/
/////////////// GetVTable ///////////////
static void* __Pyx_GetVtable(PyObject *dict) {
void* ptr;
PyObject *ob = PyObject_GetItem(dict, PYIDENT("__pyx_vtable__"));
if (!ob)
goto bad;
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
ptr = PyCapsule_GetPointer(ob, 0);
#else
ptr = PyCObject_AsVoidPtr(ob);
#endif
if (!ptr && !PyErr_Occurred())
PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
Py_DECREF(ob);
return ptr;
bad:
Py_XDECREF(ob);
return NULL;
}
...@@ -423,3 +423,53 @@ bad: ...@@ -423,3 +423,53 @@ bad:
Py_XDECREF(d); Py_XDECREF(d);
return -1; return -1;
} }
/////////////// SetVTable.proto ///////////////
static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
/////////////// SetVTable ///////////////
static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
if (!ob)
goto bad;
if (PyDict_SetItem(dict, PYIDENT("__pyx_vtable__"), ob) < 0)
goto bad;
Py_DECREF(ob);
return 0;
bad:
Py_XDECREF(ob);
return -1;
}
/////////////// GetVTable.proto ///////////////
static void* __Pyx_GetVtable(PyObject *dict); /*proto*/
/////////////// GetVTable ///////////////
static void* __Pyx_GetVtable(PyObject *dict) {
void* ptr;
PyObject *ob = PyObject_GetItem(dict, PYIDENT("__pyx_vtable__"));
if (!ob)
goto bad;
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
ptr = PyCapsule_GetPointer(ob, 0);
#else
ptr = PyCObject_AsVoidPtr(ob);
#endif
if (!ptr && !PyErr_Occurred())
PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
Py_DECREF(ob);
return ptr;
bad:
Py_XDECREF(ob);
return NULL;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment