[Python-checkins] python/dist/src/Python ceval.c,2.350,2.351

rhettinger@users.sourceforge.net rhettinger@users.sourceforge.net
Wed, 26 Feb 2003 10:11:56 -0800


Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1:/tmp/cvs-serv2864

Modified Files:
	ceval.c 
Log Message:
Micro-optimizations.
* List/Tuple checkexact is faster for the common case.
* Testing for Py_True and Py_False can be inlined for faster looping.


Index: ceval.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v
retrieving revision 2.350
retrieving revision 2.351
diff -C2 -d -r2.350 -r2.351
*** ceval.c	19 Feb 2003 15:53:16 -0000	2.350
--- ceval.c	26 Feb 2003 18:11:50 -0000	2.351
***************
*** 1656,1660 ****
  		case UNPACK_SEQUENCE:
  			v = POP();
! 			if (PyTuple_Check(v)) {
  				if (PyTuple_Size(v) != oparg) {
  					PyErr_SetString(PyExc_ValueError,
--- 1656,1660 ----
  		case UNPACK_SEQUENCE:
  			v = POP();
! 			if (PyTuple_CheckExact(v)) {
  				if (PyTuple_Size(v) != oparg) {
  					PyErr_SetString(PyExc_ValueError,
***************
*** 1670,1674 ****
  				}
  			}
! 			else if (PyList_Check(v)) {
  				if (PyList_Size(v) != oparg) {
  					PyErr_SetString(PyExc_ValueError,
--- 1670,1674 ----
  				}
  			}
! 			else if (PyList_CheckExact(v)) {
  				if (PyList_Size(v) != oparg) {
  					PyErr_SetString(PyExc_ValueError,
***************
*** 1976,1980 ****
  
  		case JUMP_IF_FALSE:
! 			err = PyObject_IsTrue(TOP());
  			if (err > 0)
  				err = 0;
--- 1976,1987 ----
  
  		case JUMP_IF_FALSE:
! 			w = TOP();
! 			if (w == Py_True)
! 				continue;
! 			if (w == Py_False) {
! 				JUMPBY(oparg);
! 				continue;
! 			}
! 			err = PyObject_IsTrue(w);
  			if (err > 0)
  				err = 0;
***************
*** 1986,1990 ****
  
  		case JUMP_IF_TRUE:
! 			err = PyObject_IsTrue(TOP());
  			if (err > 0) {
  				err = 0;
--- 1993,2004 ----
  
  		case JUMP_IF_TRUE:
! 			w = TOP();
! 			if (w == Py_False)
! 				continue;
! 			if (w == Py_True) {
! 				JUMPBY(oparg);
! 				continue;
! 			}
! 			err = PyObject_IsTrue(w);
  			if (err > 0) {
  				err = 0;