From 21012b82355b9a3ad09208d0fb9e3f08de6b2ad3 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 26 Feb 2003 18:11:50 +0000 Subject: [PATCH] Micro-optimizations. * List/Tuple checkexact is faster for the common case. * Testing for Py_True and Py_False can be inlined for faster looping. --- Python/ceval.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Python/ceval.c b/Python/ceval.c index 9a5d03994d..5286d25605 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); -- 2.40.0