aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/executor_cases.c.h
diff options
context:
space:
mode:
Diffstat (limited to 'Python/executor_cases.c.h')
-rw-r--r--Python/executor_cases.c.h25
1 files changed, 9 insertions, 16 deletions
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h
index 0d5606f5a44..f4c526a5a8c 100644
--- a/Python/executor_cases.c.h
+++ b/Python/executor_cases.c.h
@@ -7,22 +7,15 @@
break;
}
- case RESUME: {
- assert(frame == tstate->current_frame);
- /* Possibly combine this with eval breaker */
- if (_PyFrame_GetCode(frame)->_co_instrumentation_version != tstate->interp->monitoring_version) {
- int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp);
- if (err) goto error;
- #if TIER_ONE
- next_instr--;
- #endif
- #if TIER_TWO
- goto deoptimize;
- #endif
- }
- else if (oparg < 2) {
- CHECK_EVAL_BREAKER();
- }
+ case RESUME_CHECK: {
+#if defined(__EMSCRIPTEN__)
+ DEOPT_IF(emscripten_signal_clock == 0, RESUME);
+ emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING;
+#endif
+ /* Possibly combine these two checks */
+ DEOPT_IF(_PyFrame_GetCode(frame)->_co_instrumentation_version
+ != tstate->interp->monitoring_version, RESUME);
+ DEOPT_IF(_Py_atomic_load_relaxed_int32(&tstate->interp->ceval.eval_breaker), RESUME);
break;
}