From da21c0110b1948d4b3e0593e06436a2a5582f366 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 3 Oct 2001 00:50:18 +0000 Subject: [PATCH] call_method(), call_maybe(): fix a performance bug: the argument 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 | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 295be89c382..a681d337c54 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -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()) {