]> granicus.if.org Git - python/commitdiff
Move opcode tracing to occur after the possible update to f_lineno. (GH-3798)
authorGeorge King <george.w.king@gmail.com>
Thu, 19 Oct 2017 00:44:22 +0000 (17:44 -0700)
committerNick Coghlan <ncoghlan@gmail.com>
Thu, 19 Oct 2017 00:44:22 +0000 (10:44 +1000)
Python/ceval.c

index 86ffec42b31e116e7207a3aa80920f4f305a9ae4..0f7a40c45ce2c77245990eb37f73a677791d4279 100644 (file)
@@ -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;
 }