@@ -1955,7 +1955,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
19551955 }
19561956 }
19571957 PUSH (x );
1958- break ;
1958+ DISPATCH () ;
19591959 }
19601960
19611961 TARGET (STORE_NAME )
@@ -1977,11 +1977,13 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
19771977 TARGET (DELETE_NAME )
19781978 w = GETITEM (names , oparg );
19791979 if ((x = f -> f_locals ) != NULL ) {
1980- if ((err = PyObject_DelItem (x , w )) != 0 )
1980+ if ((err = PyObject_DelItem (x , w )) != 0 ) {
19811981 format_exc_check_arg (PyExc_NameError ,
19821982 NAME_ERROR_MSG ,
19831983 w );
1984- break ;
1984+ break ;
1985+ }
1986+ DISPATCH ();
19851987 }
19861988 PyErr_Format (PyExc_SystemError ,
19871989 "no locals when deleting %R" , w );
@@ -1999,8 +2001,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
19992001 Py_INCREF (w );
20002002 PUSH (w );
20012003 }
2002- Py_DECREF (v );
2003- DISPATCH ();
20042004 } else if (PyList_CheckExact (v ) &&
20052005 PyList_GET_SIZE (v ) == oparg ) {
20062006 PyObject * * items = \
@@ -2016,9 +2016,11 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
20162016 } else {
20172017 /* unpack_iterable() raised an exception */
20182018 why = WHY_EXCEPTION ;
2019+ Py_DECREF (v );
2020+ break ;
20192021 }
20202022 Py_DECREF (v );
2021- break ;
2023+ DISPATCH () ;
20222024
20232025 TARGET (UNPACK_EX )
20242026 {
@@ -2029,10 +2031,12 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
20292031 stack_pointer + totalargs )) {
20302032 stack_pointer += totalargs ;
20312033 } else {
2034+ Py_DECREF (v );
20322035 why = WHY_EXCEPTION ;
2036+ break ;
20332037 }
20342038 Py_DECREF (v );
2035- break ;
2039+ DISPATCH () ;
20362040 }
20372041
20382042 TARGET (STORE_ATTR )
@@ -2052,6 +2056,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
20522056 err = PyObject_SetAttr (v , w , (PyObject * )NULL );
20532057 /* del v.w */
20542058 Py_DECREF (v );
2059+ if (err == 0 ) DISPATCH ();
20552060 break ;
20562061
20572062 TARGET (STORE_GLOBAL )
@@ -2064,10 +2069,12 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
20642069
20652070 TARGET (DELETE_GLOBAL )
20662071 w = GETITEM (names , oparg );
2067- if ((err = PyDict_DelItem (f -> f_globals , w )) != 0 )
2072+ if ((err = PyDict_DelItem (f -> f_globals , w )) != 0 ) {
20682073 format_exc_check_arg (
20692074 PyExc_NameError , GLOBAL_NAME_ERROR_MSG , w );
2070- break ;
2075+ break ;
2076+ }
2077+ DISPATCH ();
20712078
20722079 TARGET (LOAD_NAME )
20732080 w = GETITEM (names , oparg );
0 commit comments