[Python-checkins] python/dist/src/Objects object.c,2.189,2.190

gvanrossum@users.sourceforge.net gvanrossum@users.sourceforge.net
Mon, 19 Aug 2002 12:22:53 -0700


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

Modified Files:
	object.c 
Log Message:
Another modest speedup in PyObject_GenericGetAttr(): inline the call
to _PyType_Lookup().


Index: object.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
retrieving revision 2.189
retrieving revision 2.190
diff -C2 -d -r2.189 -r2.190
*** object.c	19 Aug 2002 16:50:48 -0000	2.189
--- object.c	19 Aug 2002 19:22:50 -0000	2.190
***************
*** 1290,1294 ****
  {
  	PyTypeObject *tp = obj->ob_type;
! 	PyObject *descr;
  	PyObject *res = NULL;
  	descrgetfunc f;
--- 1290,1294 ----
  {
  	PyTypeObject *tp = obj->ob_type;
! 	PyObject *descr = NULL;
  	PyObject *res = NULL;
  	descrgetfunc f;
***************
*** 1322,1326 ****
  	}
  
! 	descr = _PyType_Lookup(tp, name);
  	f = NULL;
  	if (descr != NULL) {
--- 1322,1350 ----
  	}
  
! 	/* Inline _PyType_Lookup */
! 	{
! 		int i, n;
! 		PyObject *mro, *base, *dict;
! 
! 		/* Look in tp_dict of types in MRO */
! 		mro = tp->tp_mro;
! 		assert(mro != NULL);
! 		assert(PyTuple_Check(mro));
! 		n = PyTuple_GET_SIZE(mro);
! 		for (i = 0; i < n; i++) {
! 			base = PyTuple_GET_ITEM(mro, i);
! 			if (PyClass_Check(base))
! 				dict = ((PyClassObject *)base)->cl_dict;
! 			else {
! 				assert(PyType_Check(base));
! 				dict = ((PyTypeObject *)base)->tp_dict;
! 			}
! 			assert(dict && PyDict_Check(dict));
! 			descr = PyDict_GetItem(dict, name);
! 			if (descr != NULL)
! 				break;
! 		}
! 	}
! 
  	f = NULL;
  	if (descr != NULL) {