[Python-checkins] Move opcode tracing to occur after the possible update to f_lineno. (GH-3798)

Nick Coghlan webhook-mailer at python.org
Wed Oct 18 20:44:25 EDT 2017


https://github.com/python/cpython/commit/20faa68bbb912a7b7b056477f5966eff51ff0a65
commit: 20faa68bbb912a7b7b056477f5966eff51ff0a65
branch: master
author: George King <george.w.king at gmail.com>
committer: Nick Coghlan <ncoghlan at gmail.com>
date: 2017-10-19T10:44:22+10:00
summary:

Move opcode tracing to occur after the possible update to f_lineno. (GH-3798)

files:
M Python/ceval.c

diff --git a/Python/ceval.c b/Python/ceval.c
index 86ffec42b31..0f7a40c45ce 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -4416,10 +4416,6 @@ maybe_call_line_trace(Py_tracefunc func, PyObject *obj,
         *instr_lb = bounds.ap_lower;
         *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
        represents a jump backwards, update the frame's line number and
        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);
         }
     }
+    /* 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;
     return result;
 }



More information about the Python-checkins mailing list