Move opcode tracing to occur after the possible update to f_lineno. (GH-3798)
This commit is contained in:
parent
0b6a118a45
commit
20faa68bbb
|
@ -4416,10 +4416,6 @@ maybe_call_line_trace(Py_tracefunc func, PyObject *obj,
|
||||||
*instr_lb = bounds.ap_lower;
|
*instr_lb = bounds.ap_lower;
|
||||||
*instr_ub = bounds.ap_upper;
|
*instr_ub = bounds.ap_upper;
|
||||||
}
|
}
|
||||||
/* Always emit an opcode event if we're tracing all opcodes. */
|
|
||||||
if (frame->f_trace_opcodes) {
|
|
||||||
result = call_trace(func, obj, tstate, frame, PyTrace_OPCODE, Py_None);
|
|
||||||
}
|
|
||||||
/* If the last instruction falls at the start of a line or if it
|
/* If the last instruction falls at the start of a line or if it
|
||||||
represents a jump backwards, update the frame's line number and
|
represents a jump backwards, update the frame's line number and
|
||||||
then call the trace function if we're tracing source lines.
|
then call the trace function if we're tracing source lines.
|
||||||
|
@ -4430,6 +4426,10 @@ maybe_call_line_trace(Py_tracefunc func, PyObject *obj,
|
||||||
result = call_trace(func, obj, tstate, frame, PyTrace_LINE, Py_None);
|
result = call_trace(func, obj, tstate, frame, PyTrace_LINE, Py_None);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Always emit an opcode event if we're tracing all opcodes. */
|
||||||
|
if (frame->f_trace_opcodes) {
|
||||||
|
result = call_trace(func, obj, tstate, frame, PyTrace_OPCODE, Py_None);
|
||||||
|
}
|
||||||
*instr_prev = frame->f_lasti;
|
*instr_prev = frame->f_lasti;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue