aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/bytecodes.c
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2025-01-31 17:13:20 +0000
committerGitHub <noreply@github.com>2025-01-31 17:13:20 +0000
commit54f74b80aef8b581f2b124d150903cec83aff005 (patch)
tree39812b9759f3dda0dedb70b8a6129363a4e2ca51 /Python/bytecodes.c
parent9ba281d871c4df3a3ac4cb7896d24ba0d42751a3 (diff)
downloadcpython-54f74b80aef8b581f2b124d150903cec83aff005.tar.gz
cpython-54f74b80aef8b581f2b124d150903cec83aff005.zip
GH-128563: Move some labels, to simplify implementing tailcalling interpreter. (GH-129525)
Diffstat (limited to 'Python/bytecodes.c')
-rw-r--r--Python/bytecodes.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index f659a5e5c92..effc8e0b6f6 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -5303,14 +5303,40 @@ dummy_func(
tstate->c_recursion_remaining += PY_EVAL_C_STACK_UNITS;
return NULL;
}
- goto resume_with_error;
+ next_instr = frame->instr_ptr;
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ goto error;
}
- label(resume_with_error) {
+ label(start_frame) {
+ if (_Py_EnterRecursivePy(tstate)) {
+ goto exit_unwind;
+ }
next_instr = frame->instr_ptr;
stack_pointer = _PyFrame_GetStackPointer(frame);
- goto error;
+
+ #ifdef LLTRACE
+ {
+ int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS());
+ frame->lltrace = lltrace;
+ if (lltrace < 0) {
+ goto exit_unwind;
+ }
+ }
+ #endif
+
+ #ifdef Py_DEBUG
+ /* _PyEval_EvalFrameDefault() must not be called with an exception set,
+ because it can clear it (directly or indirectly) and so the
+ caller loses its exception */
+ assert(!_PyErr_Occurred(tstate));
+ #endif
+
+ DISPATCH();
}
+
+
+
// END BYTECODES //
}
@@ -5320,7 +5346,6 @@ dummy_func(
exit_unwind:
handle_eval_breaker:
resume_frame:
- resume_with_error:
start_frame:
unbound_local_error:
;