]> granicus.if.org Git - python/commitdiff
Performance improvement: Use PyDict_Get/SetItem instead of
authorThomas Heller <theller@ctypes.org>
Fri, 6 Jun 2008 18:37:55 +0000 (18:37 +0000)
committerThomas Heller <theller@ctypes.org>
Fri, 6 Jun 2008 18:37:55 +0000 (18:37 +0000)
PyDict_Get/SetItemString.

Modules/_ctypes/callproc.c

index 89a4d682502fc81605ee37a2a913ede6158854c4..12b0d7a41063537c145d393d817458cc849f3a9e 100644 (file)
@@ -122,12 +122,18 @@ get_error_object(int **pspace)
 {
        PyObject *dict = PyThreadState_GetDict();
        PyObject *errobj;
+       static PyObject *error_object_name;
        if (dict == 0) {
                PyErr_SetString(PyExc_RuntimeError,
                                "cannot get thread state");
                return NULL;
        }
-       errobj = PyDict_GetItemString(dict, "ctypes.error_object");
+       if (error_object_name == NULL) {
+               error_object_name = PyString_InternFromString("ctypes.error_object");
+               if (error_object_name == NULL)
+                       return NULL;
+       }
+       errobj = PyDict_GetItem(dict, error_object_name);
        if (errobj)
                Py_INCREF(errobj);
        else {
@@ -138,8 +144,8 @@ get_error_object(int **pspace)
                errobj = PyCObject_FromVoidPtr(space, PyMem_Free);
                if (errobj == NULL)
                        return NULL;
-               if (-1 == PyDict_SetItemString(dict, "ctypes.error_object",
-                                              errobj)) {
+               if (-1 == PyDict_SetItem(dict, error_object_name,
+                                        errobj)) {
                        Py_DECREF(errobj);
                        return NULL;
                }