diff options
author | Raymond Hettinger <python@rcn.com> | 2003-02-26 18:11:50 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2003-02-26 18:11:50 (GMT) |
commit | 21012b82355b9a3ad09208d0fb9e3f08de6b2ad3 (patch) | |
tree | b6b44764d7bafda0d0581d8b653f4ac434a11ba8 | |
parent | a006b8e4684eb9c6add60c8c9cd8299f8f821975 (diff) | |
download | cpython-21012b82355b9a3ad09208d0fb9e3f08de6b2ad3.zip cpython-21012b82355b9a3ad09208d0fb9e3f08de6b2ad3.tar.gz cpython-21012b82355b9a3ad09208d0fb9e3f08de6b2ad3.tar.bz2 |
Micro-optimizations.
* List/Tuple checkexact is faster for the common case.
* Testing for Py_True and Py_False can be inlined for faster looping.
-rw-r--r-- | Python/ceval.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 9a5d039..5286d25 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1655,7 +1655,7 @@ eval_frame(PyFrameObject *f) 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 @@ eval_frame(PyFrameObject *f) } } } - 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 @@ eval_frame(PyFrameObject *f) 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 @@ eval_frame(PyFrameObject *f) 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); |