]> granicus.if.org Git - python/commitdiff
call_method(), call_maybe(): fix a performance bug: the argument
authorGuido van Rossum <guido@python.org>
Wed, 3 Oct 2001 00:50:18 +0000 (00:50 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 3 Oct 2001 00:50:18 +0000 (00:50 +0000)
pointing to a static variable to hold the object form of the string
was never used, causing endless calls to PyString_InternFromString().
One particular test (with lots of __getitem__ calls) became a third
faster with this!

Objects/typeobject.c

index 295be89c382aa981239bb19d93c05d735afb7307..a681d337c54ed82fdad1064f2a5f67c4fdf3d3c1 100644 (file)
@@ -378,18 +378,15 @@ call_method(PyObject *o, char *name, PyObject **nameobj, char *format, ...)
 {
        va_list va;
        PyObject *args, *func = 0, *retval;
-       PyObject *dummy_str = NULL;
        va_start(va, format);
 
-       func = lookup_maybe(o, name, &dummy_str);
+       func = lookup_maybe(o, name, nameobj);
        if (func == NULL) {
                va_end(va);
                if (!PyErr_Occurred())
-                       PyErr_SetObject(PyExc_AttributeError, dummy_str);
-               Py_XDECREF(dummy_str);
+                       PyErr_SetObject(PyExc_AttributeError, *nameobj);
                return NULL;
        }
-       Py_DECREF(dummy_str);
 
        if (format && *format)
                args = Py_VaBuildValue(format, va);
@@ -417,11 +414,9 @@ call_maybe(PyObject *o, char *name, PyObject **nameobj, char *format, ...)
 {
        va_list va;
        PyObject *args, *func = 0, *retval;
-       PyObject *dummy_str = NULL;
        va_start(va, format);
 
-       func = lookup_maybe(o, name, &dummy_str);
-       Py_XDECREF(dummy_str);
+       func = lookup_maybe(o, name, nameobj);
        if (func == NULL) {
                va_end(va);
                if (!PyErr_Occurred()) {