From: Stefan Behnel Date: Wed, 1 May 2013 13:12:56 +0000 (+0200) Subject: use pre-built Python objects in __Pyx_ExportVoidPtr() utility function X-Git-Tag: 0.19.1~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=54bdaf56159e806873b4422ad7947bf0d64e9e16;p=platform%2Fupstream%2Fpython-cython.git use pre-built Python objects in __Pyx_ExportVoidPtr() utility function --- diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py index e0d5eb1..ac394ad 100644 --- a/Cython/Compiler/ModuleNode.py +++ b/Cython/Compiler/ModuleNode.py @@ -2267,8 +2267,9 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): env.use_utility_code(UtilityCode.load_cached("VoidPtrExport", "ImportExport.c")) for entry in entries: signature = entry.type.declaration_code("") - code.putln('if (__Pyx_ExportVoidPtr("%s", (void *)&%s, "%s") < 0) %s' % ( - entry.name, entry.cname, signature, + name = code.intern_identifier(entry.name) + code.putln('if (__Pyx_ExportVoidPtr(%s, (void *)&%s, "%s") < 0) %s' % ( + name, entry.cname, signature, code.error_goto(self.pos))) def generate_c_function_export_code(self, env, code): diff --git a/Cython/Utility/ImportExport.c b/Cython/Utility/ImportExport.c index c36849b..f4da6a3 100644 --- a/Cython/Utility/ImportExport.c +++ b/Cython/Utility/ImportExport.c @@ -387,23 +387,23 @@ bad: /////////////// VoidPtrExport.proto /////////////// -static int __Pyx_ExportVoidPtr(const char *name, void *p, const char *sig); /*proto*/ +static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig); /*proto*/ /////////////// VoidPtrExport /////////////// //@substitute: naming +//@requires: ObjectHandling.c::PyObjectSetAttrStr -static int __Pyx_ExportVoidPtr(const char *name, void *p, const char *sig) { - PyObject *d = 0; +static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig) { + PyObject *d; PyObject *cobj = 0; - d = PyObject_GetAttrString($module_cname, (char *)"$api_name"); + d = PyDict_GetItem($moddict_cname, PYIDENT("$api_name")); + Py_XINCREF(d); if (!d) { - PyErr_Clear(); d = PyDict_New(); if (!d) goto bad; - Py_INCREF(d); - if (PyModule_AddObject($module_cname, (char *)"$api_name", d) < 0) + if (__Pyx_PyObject_SetAttrStr($module_cname, PYIDENT("$api_name"), d) < 0) goto bad; } #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3 && PY_MINOR_VERSION==0) @@ -413,7 +413,7 @@ static int __Pyx_ExportVoidPtr(const char *name, void *p, const char *sig) { #endif if (!cobj) goto bad; - if (PyDict_SetItemString(d, name, cobj) < 0) + if (PyDict_SetItem(d, name, cobj) < 0) goto bad; Py_DECREF(cobj); Py_DECREF(d);