Mercurial > cpython-lru_cache-weakref
diff Python/ceval.c @ 28077:fcb39b0a6e30 legacy-trunk
Micro-optimizations.
* List/Tuple checkexact is faster for the common case.
* Testing for Py_True and Py_False can be inlined for faster looping.
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Wed, 26 Feb 2003 18:11:50 +0000 |
| parents | 4b99a701defe |
| children | 2474381527bb |
line wrap: on
line diff
--- a/Python/ceval.c Wed Feb 26 15:28:17 2003 +0000 +++ b/Python/ceval.c Wed Feb 26 18:11:50 2003 +0000 @@ -1655,7 +1655,7 @@ case UNPACK_SEQUENCE: v = POP(); - if (PyTuple_Check(v)) { + if (PyTuple_CheckExact(v)) { if (PyTuple_Size(v) != oparg) { PyErr_SetString(PyExc_ValueError, "unpack tuple of wrong size"); @@ -1669,7 +1669,7 @@ } } } - else if (PyList_Check(v)) { + else if (PyList_CheckExact(v)) { if (PyList_Size(v) != oparg) { PyErr_SetString(PyExc_ValueError, "unpack list of wrong size"); @@ -1975,7 +1975,14 @@ continue; case JUMP_IF_FALSE: - err = PyObject_IsTrue(TOP()); + w = TOP(); + if (w == Py_True) + continue; + if (w == Py_False) { + JUMPBY(oparg); + continue; + } + err = PyObject_IsTrue(w); if (err > 0) err = 0; else if (err == 0) @@ -1985,7 +1992,14 @@ continue; case JUMP_IF_TRUE: - err = PyObject_IsTrue(TOP()); + w = TOP(); + if (w == Py_False) + continue; + if (w == Py_True) { + JUMPBY(oparg); + continue; + } + err = PyObject_IsTrue(w); if (err > 0) { err = 0; JUMPBY(oparg);
