Mercurial > cpython-lru_cache-weakref
diff Python/ceval.c @ 26110:964d6b79c22e legacy-trunk
This is Richie Hindle's patch:
[ 631276 ] Exceptions raised by line trace function
It conflicted with the patches from Armin I just checked it, so I had
to so some bits by hand.
| author | Michael W. Hudson <mwh@python.net> |
|---|---|
| date | Fri, 08 Nov 2002 13:08:46 +0000 |
| parents | e61b946474df |
| children | 6ce9228a3da2 |
line wrap: on
line diff
--- a/Python/ceval.c Fri Nov 08 12:53:11 2002 +0000 +++ b/Python/ceval.c Fri Nov 08 13:08:46 2002 +0000 @@ -51,7 +51,7 @@ static void call_trace_protected(Py_tracefunc, PyObject *, PyFrameObject *, int); static void call_exc_trace(Py_tracefunc, PyObject *, PyFrameObject *); -static void maybe_call_line_trace(Py_tracefunc, PyObject *, +static int maybe_call_line_trace(Py_tracefunc, PyObject *, PyFrameObject *, int *, int *); static PyObject *apply_slice(PyObject *, PyObject *, PyObject *); @@ -726,9 +726,14 @@ /* see maybe_call_line_trace for expository comments */ f->f_stacktop = stack_pointer; - maybe_call_line_trace(tstate->c_tracefunc, - tstate->c_traceobj, - f, &instr_lb, &instr_ub); + + if (maybe_call_line_trace(tstate->c_tracefunc, + tstate->c_traceobj, + f, &instr_lb, &instr_ub)) { + /* trace function raised an exception */ + why = WHY_EXCEPTION; + goto on_error; + } /* Reload possibly changed frame fields */ JUMPTO(f->f_lasti); stack_pointer = f->f_stacktop; @@ -2872,7 +2877,7 @@ return result; } -static void +static int maybe_call_line_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame, int *instr_lb, int *instr_ub) { @@ -2947,6 +2952,8 @@ suggested by f_lasti on this one occasion where it's desirable. */ + int result = 0; + if ((frame->f_lasti < *instr_lb || frame->f_lasti >= *instr_ub)) { PyCodeObject* co = frame->f_code; int size, addr, line; @@ -2980,8 +2987,8 @@ if (addr == frame->f_lasti) { frame->f_lineno = line; - call_trace(func, obj, frame, - PyTrace_LINE, Py_None); + result = call_trace(func, obj, frame, + PyTrace_LINE, Py_None); } if (size > 0) { @@ -2996,6 +3003,8 @@ *instr_ub = INT_MAX; } } + + return result; } void
