From c23e591db02e1676ed79a01211e075d325b7ac19 Mon Sep 17 00:00:00 2001 From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> Date: Tue, 21 Oct 2025 21:34:48 +0100 Subject: [PATCH] restore optimizer code --- Include/internal/pycore_optimizer.h | 2 +- Python/optimizer_bytecodes.c | 12 ++++++++++-- Python/optimizer_cases.c.h | 11 +++++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Include/internal/pycore_optimizer.h b/Include/internal/pycore_optimizer.h index a87cce85e979..9c3aaf1edaf5 100644 --- a/Include/internal/pycore_optimizer.h +++ b/Include/internal/pycore_optimizer.h @@ -372,7 +372,7 @@ _PyJit_translate_single_bytecode_to_trace( int jump_taken); void -_PyJit_InitializeTracing(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *insert_exec_instr +_PyJit_InitializeTracing(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *insert_exec_instr, _Py_CODEUNIT *close_loop_instr, int curr_stackdepth, int chain_depth, _PyExitData *exit); void _PyJit_FinalizeTracing(PyThreadState *tstate); diff --git a/Python/optimizer_bytecodes.c b/Python/optimizer_bytecodes.c index 734a9193af7f..09c5ae764e5a 100644 --- a/Python/optimizer_bytecodes.c +++ b/Python/optimizer_bytecodes.c @@ -794,10 +794,18 @@ dummy_func(void) { op(_RETURN_GENERATOR, ( -- res)) { SYNC_SP(); + PyCodeObject *co = get_current_code_object(ctx); + ctx->frame->stack_pointer = stack_pointer; + frame_pop(ctx); stack_pointer = ctx->frame->stack_pointer; res = sym_new_unknown(ctx); - ctx->done = true; - ctx->out_of_space = true; + /* Stack space handling */ + assert(corresponding_check_stack == NULL); + assert(co != NULL); + int framesize = co->co_framesize; + assert(framesize > 0); + assert(framesize <= curr_space); + curr_space -= framesize; } op(_YIELD_VALUE, (unused -- value)) { diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index 99d8d8ae3339..002da75ea384 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -3011,10 +3011,17 @@ case _RETURN_GENERATOR: { JitOptRef res; + PyCodeObject *co = get_current_code_object(ctx); + ctx->frame->stack_pointer = stack_pointer; + frame_pop(ctx); stack_pointer = ctx->frame->stack_pointer; res = sym_new_unknown(ctx); - ctx->done = true; - ctx->out_of_space = true; + assert(corresponding_check_stack == NULL); + assert(co != NULL); + int framesize = co->co_framesize; + assert(framesize > 0); + assert(framesize <= curr_space); + curr_space -= framesize; stack_pointer[0] = res; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); -- 2.47.3