[Python-checkins] CVS: python/dist/src/Objects typeobject.c,2.83,2.84

Guido van Rossum gvanrossum@users.sourceforge.net
Tue, 02 Oct 2001 17:50:20 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv14623

Modified Files:
	typeobject.c 
Log Message:
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!


Index: typeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/typeobject.c,v
retrieving revision 2.83
retrieving revision 2.84
diff -C2 -d -r2.83 -r2.84
*** typeobject.c	2001/10/02 21:24:57	2.83
--- typeobject.c	2001/10/03 00:50:18	2.84
***************
*** 379,394 ****
  	va_list va;
  	PyObject *args, *func = 0, *retval;
- 	PyObject *dummy_str = NULL;
  	va_start(va, format);
  
! 	func = lookup_maybe(o, name, &dummy_str);
  	if (func == NULL) {
  		va_end(va);
  		if (!PyErr_Occurred())
! 			PyErr_SetObject(PyExc_AttributeError, dummy_str);
! 		Py_XDECREF(dummy_str);
  		return NULL;
  	}
- 	Py_DECREF(dummy_str);
  
  	if (format && *format)
--- 379,391 ----
  	va_list va;
  	PyObject *args, *func = 0, *retval;
  	va_start(va, format);
  
! 	func = lookup_maybe(o, name, nameobj);
  	if (func == NULL) {
  		va_end(va);
  		if (!PyErr_Occurred())
! 			PyErr_SetObject(PyExc_AttributeError, *nameobj);
  		return NULL;
  	}
  
  	if (format && *format)
***************
*** 418,426 ****
  	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);
  	if (func == NULL) {
  		va_end(va);
--- 415,421 ----
  	va_list va;
  	PyObject *args, *func = 0, *retval;
  	va_start(va, format);
  
! 	func = lookup_maybe(o, name, nameobj);
  	if (func == NULL) {
  		va_end(va);