[Python-checkins] cpython: add some missing DISPATCH()

benjamin.peterson python-checkins at python.org
Wed Oct 10 20:10:51 CEST 2012


http://hg.python.org/cpython/rev/5a13f9b842b1
changeset:   79650:5a13f9b842b1
parent:      79629:5733529b297c
user:        Benjamin Peterson <benjamin at python.org>
date:        Wed Oct 10 14:10:33 2012 -0400
summary:
  add some missing DISPATCH()

files:
  Python/ceval.c |  25 ++++++++++++++++---------
  1 files changed, 16 insertions(+), 9 deletions(-)


diff --git a/Python/ceval.c b/Python/ceval.c
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1955,7 +1955,7 @@
                 }
             }
             PUSH(x);
-            break;
+            DISPATCH();
         }
 
         TARGET(STORE_NAME)
@@ -1977,11 +1977,13 @@
         TARGET(DELETE_NAME)
             w = GETITEM(names, oparg);
             if ((x = f->f_locals) != NULL) {
-                if ((err = PyObject_DelItem(x, w)) != 0)
+                if ((err = PyObject_DelItem(x, w)) != 0) {
                     format_exc_check_arg(PyExc_NameError,
                                          NAME_ERROR_MSG,
                                          w);
-                break;
+                    break;
+                }
+                DISPATCH();
             }
             PyErr_Format(PyExc_SystemError,
                          "no locals when deleting %R", w);
@@ -1999,8 +2001,6 @@
                     Py_INCREF(w);
                     PUSH(w);
                 }
-                Py_DECREF(v);
-                DISPATCH();
             } else if (PyList_CheckExact(v) &&
                        PyList_GET_SIZE(v) == oparg) {
                 PyObject **items = \
@@ -2016,9 +2016,11 @@
             } else {
                 /* unpack_iterable() raised an exception */
                 why = WHY_EXCEPTION;
+                Py_DECREF(v);
+                break;
             }
             Py_DECREF(v);
-            break;
+            DISPATCH();
 
         TARGET(UNPACK_EX)
         {
@@ -2029,10 +2031,12 @@
                                 stack_pointer + totalargs)) {
                 stack_pointer += totalargs;
             } else {
+                Py_DECREF(v);
                 why = WHY_EXCEPTION;
+                break;
             }
             Py_DECREF(v);
-            break;
+            DISPATCH();
         }
 
         TARGET(STORE_ATTR)
@@ -2052,6 +2056,7 @@
             err = PyObject_SetAttr(v, w, (PyObject *)NULL);
                                             /* del v.w */
             Py_DECREF(v);
+            if (err == 0) DISPATCH();
             break;
 
         TARGET(STORE_GLOBAL)
@@ -2064,10 +2069,12 @@
 
         TARGET(DELETE_GLOBAL)
             w = GETITEM(names, oparg);
-            if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
+            if ((err = PyDict_DelItem(f->f_globals, w)) != 0) {
                 format_exc_check_arg(
                     PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w);
-            break;
+                break;
+            }
+            DISPATCH();
 
         TARGET(LOAD_NAME)
             w = GETITEM(names, oparg);

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list