diff options
author | Mark Shannon <mark@hotpy.org> | 2025-01-31 17:13:20 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-31 17:13:20 +0000 |
commit | 54f74b80aef8b581f2b124d150903cec83aff005 (patch) | |
tree | 39812b9759f3dda0dedb70b8a6129363a4e2ca51 /Python/bytecodes.c | |
parent | 9ba281d871c4df3a3ac4cb7896d24ba0d42751a3 (diff) | |
download | cpython-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.c | 33 |
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: ; |