Index: Python/ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.421 diff -c -r2.421 ceval.c *** Python/ceval.c 18 Jan 2005 15:56:11 -0000 2.421 --- Python/ceval.c 20 Feb 2005 20:47:12 -0000 *************** *** 2490,2496 **** } } ! reset_exc_info(tstate); /* pop frame */ exit_eval_frame: --- 2490,2501 ---- } } ! if (tstate->frame->f_exc_type != NULL) ! reset_exc_info(tstate); ! else { ! assert(tstate->frame->f_exc_value == NULL); ! assert(tstate->frame->f_exc_traceback == NULL); ! } /* pop frame */ exit_eval_frame: *************** *** 2817,2840 **** frame = tstate->frame; if (frame->f_exc_type == NULL) { /* This frame didn't catch an exception before */ /* Save previous exception of this thread in this frame */ if (tstate->exc_type == NULL) { - Py_INCREF(Py_None); tstate->exc_type = Py_None; } ! tmp_type = frame->f_exc_type; ! tmp_value = frame->f_exc_value; ! tmp_tb = frame->f_exc_traceback; ! Py_XINCREF(tstate->exc_type); Py_XINCREF(tstate->exc_value); Py_XINCREF(tstate->exc_traceback); frame->f_exc_type = tstate->exc_type; frame->f_exc_value = tstate->exc_value; frame->f_exc_traceback = tstate->exc_traceback; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); } /* Set new exception for this thread */ tmp_type = tstate->exc_type; --- 2822,2840 ---- frame = tstate->frame; if (frame->f_exc_type == NULL) { + assert(frame->f_exc_value == NULL); + assert(frame->f_exc_traceback == NULL); /* This frame didn't catch an exception before */ /* Save previous exception of this thread in this frame */ if (tstate->exc_type == NULL) { tstate->exc_type = Py_None; } ! Py_INCREF(tstate->exc_type); Py_XINCREF(tstate->exc_value); Py_XINCREF(tstate->exc_traceback); frame->f_exc_type = tstate->exc_type; frame->f_exc_value = tstate->exc_value; frame->f_exc_traceback = tstate->exc_traceback; } /* Set new exception for this thread */ tmp_type = tstate->exc_type; *************** *** 2861,2885 **** PyFrameObject *frame; PyObject *tmp_type, *tmp_value, *tmp_tb; frame = tstate->frame; ! if (frame->f_exc_type != NULL) { ! /* This frame caught an exception */ ! tmp_type = tstate->exc_type; ! tmp_value = tstate->exc_value; ! tmp_tb = tstate->exc_traceback; ! Py_XINCREF(frame->f_exc_type); ! Py_XINCREF(frame->f_exc_value); ! Py_XINCREF(frame->f_exc_traceback); ! tstate->exc_type = frame->f_exc_type; ! tstate->exc_value = frame->f_exc_value; ! tstate->exc_traceback = frame->f_exc_traceback; ! Py_XDECREF(tmp_type); ! Py_XDECREF(tmp_value); ! Py_XDECREF(tmp_tb); ! /* For b/w compatibility */ ! PySys_SetObject("exc_type", frame->f_exc_type); ! PySys_SetObject("exc_value", frame->f_exc_value); ! PySys_SetObject("exc_traceback", frame->f_exc_traceback); ! } tmp_type = frame->f_exc_type; tmp_value = frame->f_exc_value; tmp_tb = frame->f_exc_traceback; --- 2861,2885 ---- PyFrameObject *frame; PyObject *tmp_type, *tmp_value, *tmp_tb; frame = tstate->frame; ! assert(frame->f_exc_type != NULL); ! /* This frame caught an exception */ ! tmp_type = tstate->exc_type; ! tmp_value = tstate->exc_value; ! tmp_tb = tstate->exc_traceback; ! Py_INCREF(frame->f_exc_type); ! Py_XINCREF(frame->f_exc_value); ! Py_XINCREF(frame->f_exc_traceback); ! tstate->exc_type = frame->f_exc_type; ! tstate->exc_value = frame->f_exc_value; ! tstate->exc_traceback = frame->f_exc_traceback; ! Py_XDECREF(tmp_type); ! Py_XDECREF(tmp_value); ! Py_XDECREF(tmp_tb); ! /* For b/w compatibility */ ! PySys_SetObject("exc_type", frame->f_exc_type); ! PySys_SetObject("exc_value", frame->f_exc_value); ! PySys_SetObject("exc_traceback", frame->f_exc_traceback); ! tmp_type = frame->f_exc_type; tmp_value = frame->f_exc_value; tmp_tb = frame->f_exc_traceback;