]> granicus.if.org Git - python/commitdiff
Micro-optimizations.
authorRaymond Hettinger <python@rcn.com>
Wed, 26 Feb 2003 18:11:50 +0000 (18:11 +0000)
committerRaymond Hettinger <python@rcn.com>
Wed, 26 Feb 2003 18:11:50 +0000 (18:11 +0000)
* 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

index 9a5d03994d50220f734f49c67151d32252a02243..5286d25605d32eafdcaa96f243668202e7b288b9 100644 (file)
@@ -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);