From ff2cb21e8b299b7c290cac98beb8f6d3200d961d Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 27 Mar 2025 09:49:36 +0000 Subject: [PATCH 01/10] Force stack to memory and clear logical stack if mismatch --- Tools/cases_generator/stack.py | 60 ++++++++++++++++------------------ 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/Tools/cases_generator/stack.py b/Tools/cases_generator/stack.py index 76dfc48a6b594e..bf7b8831fe56f9 100644 --- a/Tools/cases_generator/stack.py +++ b/Tools/cases_generator/stack.py @@ -234,38 +234,30 @@ def pop(self, var: StackItem, out: CWriter) -> Local: indirect = "&" if var.is_array() else "" if self.variables: popped = self.variables.pop() - if var.is_array() ^ popped.is_array(): - raise StackError( - f"Array mismatch when popping '{popped.name}' from stack to assign to '{var.name}'. " - f"Expected {array_or_scalar(var)} got {array_or_scalar(popped)}" - ) - if popped.size != var.size: - raise StackError( - f"Size mismatch when popping '{popped.name}' from stack to assign to '{var.name}'. " - f"Expected {var_size(var)} got {var_size(popped.item)}" - ) - if not var.used: - return popped - if popped.name != var.name: - rename = f"{var.name} = {popped.name};\n" - popped.item = var - else: - rename = "" - if not popped.in_local: - if popped.memory_offset is None: - popped.memory_offset = self.logical_sp - assert popped.memory_offset == self.logical_sp, (popped, self.as_comment()) - offset = popped.memory_offset.to_c() - if var.is_array(): - defn = f"{var.name} = &stack_pointer[{offset}];\n" + if var.is_array() == popped.is_array() and popped.size == var.size: + if not var.used: + return popped + if popped.name != var.name: + rename = f"{var.name} = {popped.name};\n" + popped.item = var else: - defn = f"{var.name} = stack_pointer[{offset}];\n" - popped.in_local = True - else: - defn = rename - out.emit(defn) - return popped - + rename = "" + if not popped.in_local: + if popped.memory_offset is None: + popped.memory_offset = self.logical_sp + assert popped.memory_offset == self.logical_sp, (popped, self.as_comment()) + offset = popped.memory_offset.to_c() + if var.is_array(): + defn = f"{var.name} = &stack_pointer[{offset}];\n" + else: + defn = f"{var.name} = stack_pointer[{offset}];\n" + popped.in_local = True + else: + defn = rename + out.emit(defn) + return popped + #Mismatch + self.clear(out) self.base_offset = self.logical_sp if var.name in UNUSED or not var.used: return Local.unused(var, self.base_offset) @@ -276,6 +268,12 @@ def pop(self, var: StackItem, out: CWriter) -> Local: out.emit(assign) return Local.from_memory(var, self.base_offset) + def clear(self, out: CWriter): + "Flush to memory and clear variables stack" + self.flush(out) + self.variables = [] + self.base_offset = self.logical_sp + def push(self, var: Local) -> None: assert(var not in self.variables) self.variables.append(var) From 7509764d7da1e0a9fbdde5672c9476c3668180f7 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 27 Mar 2025 18:14:32 +0000 Subject: [PATCH 02/10] TOS caching for the interpreter. Work in progress. --- Include/internal/pycore_interpframe.h | 7 +- Include/internal/pycore_opcode_metadata.h | 12 +- Include/internal/pycore_stackref.h | 5 - Include/internal/pycore_structs.h | 6 + Lib/test/test_sys.py | 4 +- Objects/codeobject.c | 2 +- Python/bytecodes.c | 58 +- Python/ceval.c | 60 +- Python/ceval_macros.h | 4 +- Python/executor_cases.c.h | 1082 +++- Python/generated_cases.c.h | 5385 +++++++++++++++--- Python/optimizer_analysis.c | 2 +- Python/optimizer_cases.c.h | 513 +- Python/stackrefs.c | 3 + Tools/cases_generator/generators_common.py | 47 +- Tools/cases_generator/optimizer_generator.py | 2 +- Tools/cases_generator/stack.py | 93 +- Tools/cases_generator/tier1_generator.py | 92 +- Tools/cases_generator/tier2_generator.py | 2 +- 19 files changed, 6493 insertions(+), 886 deletions(-) diff --git a/Include/internal/pycore_interpframe.h b/Include/internal/pycore_interpframe.h index 1d373d55ab2de8..360dd362ac5978 100644 --- a/Include/internal/pycore_interpframe.h +++ b/Include/internal/pycore_interpframe.h @@ -43,7 +43,7 @@ static inline PyFunctionObject *_PyFrame_GetFunction(_PyInterpreterFrame *f) { } static inline _PyStackRef *_PyFrame_Stackbase(_PyInterpreterFrame *f) { - return (f->localsplus + _PyFrame_GetCode(f)->co_nlocalsplus); + return (f->localsplus + _PyFrame_GetCode(f)->co_nlocalsplus + 1); } static inline _PyStackRef _PyFrame_StackPeek(_PyInterpreterFrame *f) { @@ -134,7 +134,7 @@ _PyFrame_Initialize( frame->f_builtins = func_obj->func_builtins; frame->f_globals = func_obj->func_globals; frame->f_locals = locals; - frame->stackpointer = frame->localsplus + code->co_nlocalsplus; + frame->stackpointer = frame->localsplus + code->co_nlocalsplus + 1; frame->frame_obj = NULL; #ifdef Py_GIL_DISABLED _PyFrame_InitializeTLBC(tstate, frame, code); @@ -146,6 +146,7 @@ _PyFrame_Initialize( frame->owner = FRAME_OWNED_BY_THREAD; frame->visited = 0; #ifdef Py_DEBUG + frame->localsplus[code->co_nlocalsplus] = PyStackRef_NULL; frame->lltrace = 0; #endif @@ -317,7 +318,7 @@ _PyFrame_PushTrampolineUnchecked(PyThreadState *tstate, PyCodeObject *code, int #endif frame->f_locals = NULL; assert(stackdepth <= code->co_stacksize); - frame->stackpointer = frame->localsplus + code->co_nlocalsplus + stackdepth; + frame->stackpointer = frame->localsplus + code->co_nlocalsplus + stackdepth + 1; frame->frame_obj = NULL; #ifdef Py_GIL_DISABLED _PyFrame_InitializeTLBC(tstate, frame, code); diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 5a165a5a3a2675..3a32967e721903 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -234,7 +234,7 @@ int _PyOpcode_num_popped(int opcode, int oparg) { case INSTRUMENTED_END_SEND: return 2; case INSTRUMENTED_FOR_ITER: - return 0; + return 1; case INSTRUMENTED_INSTRUCTION: return 0; case INSTRUMENTED_JUMP_BACKWARD: @@ -250,13 +250,13 @@ int _PyOpcode_num_popped(int opcode, int oparg) { case INSTRUMENTED_POP_ITER: return 1; case INSTRUMENTED_POP_JUMP_IF_FALSE: - return 0; + return 1; case INSTRUMENTED_POP_JUMP_IF_NONE: - return 0; + return 1; case INSTRUMENTED_POP_JUMP_IF_NOT_NONE: - return 0; + return 1; case INSTRUMENTED_POP_JUMP_IF_TRUE: - return 0; + return 1; case INSTRUMENTED_RESUME: return 0; case INSTRUMENTED_RETURN_VALUE: @@ -713,7 +713,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg) { case INSTRUMENTED_END_SEND: return 1; case INSTRUMENTED_FOR_ITER: - return 0; + return 2; case INSTRUMENTED_INSTRUCTION: return 0; case INSTRUMENTED_JUMP_BACKWARD: diff --git a/Include/internal/pycore_stackref.h b/Include/internal/pycore_stackref.h index e6772c96eeb79c..5683b98470d3ea 100644 --- a/Include/internal/pycore_stackref.h +++ b/Include/internal/pycore_stackref.h @@ -4,11 +4,6 @@ extern "C" { #endif -// Define this to get precise tracking of closed stackrefs. -// This will use unbounded memory, as it can only grow. -// Use this to track double closes in short-lived programs -// #define Py_STACKREF_CLOSE_DEBUG 1 - #ifndef Py_BUILD_CORE # error "this header requires Py_BUILD_CORE define" #endif diff --git a/Include/internal/pycore_structs.h b/Include/internal/pycore_structs.h index b54d61197ad789..0d5f5dc7acc773 100644 --- a/Include/internal/pycore_structs.h +++ b/Include/internal/pycore_structs.h @@ -57,6 +57,12 @@ typedef struct { // Define this to get precise tracking of stackrefs. // #define Py_STACKREF_DEBUG 1 +// Define this to get precise tracking of closed stackrefs. +// This will use unbounded memory, as it can only grow. +// Use this to track double closes in short-lived programs +// #define Py_STACKREF_CLOSE_DEBUG 1 + + typedef union _PyStackRef { #if !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG) uint64_t index; diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 368a5ba413b6ce..92db8dad94eee2 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -1661,9 +1661,9 @@ def func(): return sys._getframe() x = func() if support.Py_GIL_DISABLED: - INTERPRETER_FRAME = '9PihcP' + INTERPRETER_FRAME = '9PihcPP' else: - INTERPRETER_FRAME = '9PhcP' + INTERPRETER_FRAME = '9PhcPP' check(x, size('3PiccPPP' + INTERPRETER_FRAME + 'P')) # function def func(): pass diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 33505b40a7329f..70e80375435e95 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -546,7 +546,7 @@ init_code(PyCodeObject *co, struct _PyCodeConstructor *con) /* derived values */ co->co_nlocalsplus = nlocalsplus; co->co_nlocals = nlocals; - co->co_framesize = nlocalsplus + con->stacksize + FRAME_SPECIALS_SIZE; + co->co_framesize = nlocalsplus + con->stacksize + FRAME_SPECIALS_SIZE + 1; co->co_ncellvars = ncellvars; co->co_nfreevars = nfreevars; #ifdef Py_GIL_DISABLED diff --git a/Python/bytecodes.c b/Python/bytecodes.c index b2900ba951a52f..650ab1892c2c86 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -204,7 +204,7 @@ dummy_func( ptrdiff_t off = this_instr - _PyFrame_GetBytecode(frame); frame->tlbc_index = ((_PyThreadStateImpl *)tstate)->tlbc_index; frame->instr_ptr = bytecode + off; - // Make sure this_instr gets reset correctley for any uops that + // Make sure this_instr gets reset correctly for any uops that // follow next_instr = frame->instr_ptr; DISPATCH(); @@ -1111,7 +1111,7 @@ dummy_func( tstate->current_frame = frame->previous; assert(!_PyErr_Occurred(tstate)); PyObject *result = PyStackRef_AsPyObjectSteal(retval); - SYNC_SP(); /* Not strictly necessary, but prevents warnings */ + LLTRACE_RESUME_FRAME(); return result; } @@ -1223,8 +1223,9 @@ dummy_func( { PyGenObject *gen = (PyGenObject *)receiver_o; _PyInterpreterFrame *gen_frame = &gen->gi_iframe; - STACK_SHRINK(1); _PyFrame_StackPush(gen_frame, PyStackRef_MakeHeapSafe(v)); + DEAD(v); + SYNC_SP(); gen->gi_frame_state = FRAME_EXECUTING; gen->gi_exc_state.previous_item = tstate->exc_info; tstate->exc_info = &gen->gi_exc_state; @@ -2436,10 +2437,10 @@ dummy_func( PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1); _PyInterpreterFrame *new_frame = _PyFrame_PushUnchecked( tstate, PyStackRef_FromPyObjectNew(f), 2, frame); - // Manipulate stack directly because we exit with DISPATCH_INLINED(). - STACK_SHRINK(1); new_frame->localsplus[0] = owner; DEAD(owner); + // Manipulate stack directly because we exit with DISPATCH_INLINED(). + SYNC_SP(); new_frame->localsplus[1] = PyStackRef_FromPyObjectNew(name); frame->return_offset = INSTRUCTION_SIZE; DISPATCH_INLINED(new_frame); @@ -3083,12 +3084,11 @@ dummy_func( macro(FOR_ITER) = _SPECIALIZE_FOR_ITER + _FOR_ITER; - inst(INSTRUMENTED_FOR_ITER, (unused/1 -- )) { - _PyStackRef iter_stackref = TOP(); - PyObject *iter = PyStackRef_AsPyObjectBorrow(iter_stackref); - PyObject *next = (*Py_TYPE(iter)->tp_iternext)(iter); - if (next != NULL) { - PUSH(PyStackRef_FromPyObjectSteal(next)); + inst(INSTRUMENTED_FOR_ITER, (unused/1, iter -- iter, next)) { + PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); + PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o); + if (next_o != NULL) { + next = PyStackRef_FromPyObjectSteal(next_o); INSTRUMENTED_JUMP(this_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT); } else { @@ -3105,6 +3105,7 @@ dummy_func( next_instr[oparg].op.code == INSTRUMENTED_END_FOR); /* Skip END_FOR */ JUMPBY(oparg + 1); + DISPATCH(); } } @@ -3168,10 +3169,12 @@ dummy_func( assert(Py_TYPE(iter_o) == &PyListIter_Type); PyListObject *seq = it->it_seq; assert(seq); + // The code generator doesn't understand #ifdef Py_GIL_DISABLED + // so put in some control flow #ifdef Py_GIL_DISABLED assert(_PyObject_IsUniquelyReferenced(iter_o)); assert(_Py_IsOwnedByCurrentThread((PyObject *)seq) || - _PyObject_GC_IS_SHARED(seq)); + _PyObject_GC_IS_SHARED(seq)); STAT_INC(FOR_ITER, hit); int result = _PyList_GetItemRefNoLock(seq, it->it_index, &next); // A negative result means we lost a race with another thread @@ -3994,8 +3997,9 @@ dummy_func( tstate, (PyCodeObject *)&_Py_InitCleanup, 1, frame); assert(_PyFrame_GetBytecode(shim)[0].op.code == EXIT_INIT_CHECK); assert(_PyFrame_GetBytecode(shim)[1].op.code == RETURN_VALUE); + shim->localsplus[0] = PyStackRef_NULL; /* Push self onto stack of shim */ - shim->localsplus[0] = PyStackRef_DUP(self[0]); + shim->localsplus[1] = PyStackRef_DUP(self[0]); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, init[0], NULL, args-1, oparg+1, NULL, shim); DEAD(init); @@ -4022,7 +4026,6 @@ dummy_func( _PUSH_FRAME; inst(EXIT_INIT_CHECK, (should_be_none -- )) { - assert(STACK_LEVEL() == 2); if (!PyStackRef_IsNone(should_be_none)) { PyErr_Format(PyExc_TypeError, "__init__() should return None, not '%.200s'", @@ -4932,6 +4935,7 @@ dummy_func( } next_instr = frame->instr_ptr; if (next_instr != this_instr) { + SYNC_SP(); DISPATCH(); } } @@ -4976,46 +4980,48 @@ dummy_func( _CHECK_PERIODIC + _MONITOR_JUMP_BACKWARD; - inst(INSTRUMENTED_POP_JUMP_IF_TRUE, (unused/1 -- )) { - _PyStackRef cond = POP(); + inst(INSTRUMENTED_POP_JUMP_IF_TRUE, (unused/1, cond -- )) { assert(PyStackRef_BoolCheck(cond)); int jump = PyStackRef_IsTrue(cond); + DEAD(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } } - inst(INSTRUMENTED_POP_JUMP_IF_FALSE, (unused/1 -- )) { - _PyStackRef cond = POP(); + inst(INSTRUMENTED_POP_JUMP_IF_FALSE, (unused/1, cond -- )) { assert(PyStackRef_BoolCheck(cond)); int jump = PyStackRef_IsFalse(cond); + DEAD(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } } - inst(INSTRUMENTED_POP_JUMP_IF_NONE, (unused/1 -- )) { - _PyStackRef value_stackref = POP(); - int jump = PyStackRef_IsNone(value_stackref); + inst(INSTRUMENTED_POP_JUMP_IF_NONE, (unused/1, value -- )) { + int jump = PyStackRef_IsNone(value); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { + DEAD(value); INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } else { - PyStackRef_CLOSE(value_stackref); + PyStackRef_CLOSE(value); } } - inst(INSTRUMENTED_POP_JUMP_IF_NOT_NONE, (unused/1 -- )) { - _PyStackRef value_stackref = POP(); - int jump = !PyStackRef_IsNone(value_stackref); + inst(INSTRUMENTED_POP_JUMP_IF_NOT_NONE, (unused/1, value -- )) { + int jump = !PyStackRef_IsNone(value); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { - PyStackRef_CLOSE(value_stackref); + PyStackRef_CLOSE(value); INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } + else { + DEAD(value); + } } tier1 inst(EXTENDED_ARG, ( -- )) { diff --git a/Python/ceval.c b/Python/ceval.c index 363f263ad2a083..ec891b4d7efb9d 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -151,18 +151,6 @@ dump_item(_PyStackRef item) printf(""); return; } - if ( - obj == Py_None - || PyBool_Check(obj) - || PyLong_CheckExact(obj) - || PyFloat_CheckExact(obj) - || PyUnicode_CheckExact(obj) - ) { - if (PyObject_Print(obj, stdout, 0) == 0) { - return; - } - PyErr_Clear(); - } // Don't call __repr__(), it might recurse into the interpreter. printf("<%s at %p>", Py_TYPE(obj)->tp_name, (void *)obj); } @@ -182,14 +170,19 @@ dump_stack(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer) dump_item(*ptr); } printf("]\n"); - printf(" stack=["); - for (_PyStackRef *ptr = stack_base; ptr < stack_pointer; ptr++) { - if (ptr != stack_base) { - printf(", "); + if (stack_pointer < stack_base) { + printf(" stack=%d\n", (int)(stack_pointer-stack_base)); + } + else { + printf(" stack=["); + for (_PyStackRef *ptr = stack_base; ptr < stack_pointer; ptr++) { + if (ptr != stack_base) { + printf(", "); + } + dump_item(*ptr); } - dump_item(*ptr); + printf("]\n"); } - printf("]\n"); fflush(stdout); PyErr_SetRaisedException(exc); _PyFrame_GetStackPointer(frame); @@ -197,18 +190,22 @@ dump_stack(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer) static void lltrace_instruction(_PyInterpreterFrame *frame, + _PyStackRef _tos, _PyStackRef *stack_pointer, _Py_CODEUNIT *next_instr, int opcode, int oparg) { - if (frame->owner >= FRAME_OWNED_BY_INTERPRETER) { - return; + int offset = 0; + if (frame->owner < FRAME_OWNED_BY_INTERPRETER) { + printf("_tos = "); + dump_item(_tos); + printf("; "); + dump_stack(frame, stack_pointer); + offset = (int)(next_instr - _PyFrame_GetBytecode(frame)); } - dump_stack(frame, stack_pointer); const char *opname = _PyOpcode_OpName[opcode]; assert(opname != NULL); - int offset = (int)(next_instr - _PyFrame_GetBytecode(frame)); if (OPCODE_HAS_ARG((int)_PyOpcode_Deopt[opcode])) { printf("%d: %s %d\n", offset * 2, opname, oparg); } @@ -950,6 +947,13 @@ _PyObjectArray_Free(PyObject **array, PyObject **scratch) /* This setting is reversed below following _PyEval_EvalFrameDefault */ #endif +#ifdef Py_GIL_DISABLED +#define Py_FREE_THREADING 1 +#else +#define Py_FREE_THREADING 0 +#endif + + #if Py_TAIL_CALL_INTERP #include "opcode_targets.h" #include "generated_cases.c.h" @@ -986,8 +990,12 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int * These are cached values from the frame and code object. */ _Py_CODEUNIT *next_instr; _PyStackRef *stack_pointer; - -#if defined(Py_DEBUG) && !defined(Py_STACKREF_DEBUG) +#ifdef Py_DEBUG + entry_frame.localsplus[0] = PyStackRef_NULL; +#endif +#ifdef Py_STACKREF_DEBUG + entry_frame.f_funcobj = PyStackRef_None; +#elif defined(Py_DEBUG) /* Set these to invalid but identifiable values for debugging. */ entry_frame.f_funcobj = (_PyStackRef){.bits = 0xaaa0}; entry_frame.f_locals = (PyObject*)0xaaa1; @@ -997,7 +1005,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int #endif entry_frame.f_executable = PyStackRef_None; entry_frame.instr_ptr = (_Py_CODEUNIT *)_Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS + 1; - entry_frame.stackpointer = entry_frame.localsplus; + entry_frame.stackpointer = entry_frame.localsplus + 1; entry_frame.owner = FRAME_OWNED_BY_INTERPRETER; entry_frame.visited = 0; entry_frame.return_offset = 0; @@ -1044,7 +1052,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int _PyExecutorObject *current_executor = NULL; const _PyUOpInstruction *next_uop = NULL; #endif - + _PyStackRef _tos = PyStackRef_NULL; #if Py_TAIL_CALL_INTERP return _TAIL_CALL_start_frame(frame, NULL, tstate, NULL, 0); #else diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h index f19ffd23161ace..919d357aa83ac0 100644 --- a/Python/ceval_macros.h +++ b/Python/ceval_macros.h @@ -110,7 +110,7 @@ /* PRE_DISPATCH_GOTO() does lltrace if enabled. Normally a no-op */ #ifdef Py_DEBUG #define PRE_DISPATCH_GOTO() if (frame->lltrace >= 5) { \ - lltrace_instruction(frame, stack_pointer, next_instr, opcode, oparg); } + lltrace_instruction(frame, _tos, stack_pointer, next_instr, opcode, oparg); } #else #define PRE_DISPATCH_GOTO() ((void)0) #endif @@ -238,7 +238,7 @@ GETITEM(PyObject *v, Py_ssize_t i) { #endif #define WITHIN_STACK_BOUNDS() \ - (frame->owner == FRAME_OWNED_BY_INTERPRETER || (STACK_LEVEL() >= 0 && STACK_LEVEL() <= STACK_SIZE())) + (frame->owner == FRAME_OWNED_BY_INTERPRETER || (STACK_LEVEL() >= -1 && STACK_LEVEL() <= STACK_SIZE())) /* Data access macros */ #define FRAME_CO_CONSTS (_PyFrame_GetCode(frame)->co_consts) diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index ccdf74a575baa2..d6901dcd75cf9c 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -88,9 +88,12 @@ JUMP_TO_ERROR(); } value = PyStackRef_DUP(value_s); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -100,9 +103,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -112,9 +118,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -124,9 +133,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -136,9 +148,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -148,9 +163,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -160,9 +178,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -172,9 +193,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -184,9 +208,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -195,9 +222,12 @@ oparg = CURRENT_OPARG(); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -207,9 +237,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -219,9 +252,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -231,9 +267,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -243,9 +282,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -255,9 +297,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -267,9 +312,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -279,9 +327,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -291,9 +342,12 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -302,9 +356,12 @@ oparg = CURRENT_OPARG(); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -313,9 +370,12 @@ oparg = CURRENT_OPARG(); value = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_NULL; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -326,9 +386,12 @@ oparg = CURRENT_OPARG(); PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); value = PyStackRef_FromPyObjectNewMortal(obj); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -338,9 +401,12 @@ PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); assert(_Py_IsImmortal(obj)); value = PyStackRef_FromPyObjectImmortal(obj); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -351,9 +417,12 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -364,9 +433,12 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -377,9 +449,12 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -390,9 +465,12 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -402,9 +480,12 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -413,6 +494,7 @@ oparg = 0; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -421,6 +503,7 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -432,6 +515,7 @@ oparg = 1; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -440,6 +524,7 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -451,6 +536,7 @@ oparg = 2; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -459,6 +545,7 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -470,6 +557,7 @@ oparg = 3; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -478,6 +566,7 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -489,6 +578,7 @@ oparg = 4; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -497,6 +587,7 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -508,6 +599,7 @@ oparg = 5; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -516,6 +608,7 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -527,6 +620,7 @@ oparg = 6; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -535,6 +629,7 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -546,6 +641,7 @@ oparg = 7; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -554,6 +650,7 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -564,6 +661,7 @@ _PyStackRef value; oparg = CURRENT_OPARG(); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -572,6 +670,7 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -581,8 +680,10 @@ case _POP_TOP: { _PyStackRef value; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -592,17 +693,22 @@ case _PUSH_NULL: { _PyStackRef res; res = PyStackRef_NULL; + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } case _END_FOR: { _PyStackRef value; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -614,12 +720,17 @@ _PyStackRef receiver; _PyStackRef val; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ receiver = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)receiver; val = value; + /* Variables=['val'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = val; + /* Variables=['val'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(receiver); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -630,11 +741,13 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Negative(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -642,9 +755,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -652,10 +768,13 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(value)); res = PyStackRef_IsFalse(value) ? PyStackRef_True : PyStackRef_False; + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -663,11 +782,13 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_IsTrue(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -675,15 +796,19 @@ JUMP_TO_ERROR(); } res = err ? PyStackRef_True : PyStackRef_False; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _TO_BOOL_BOOL: { _PyStackRef value; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_BoolCheck(value)) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -696,6 +821,7 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -709,14 +835,16 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -724,6 +852,7 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyList_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -734,7 +863,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = res; + /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; @@ -744,13 +875,16 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_IsNone(value)) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); res = PyStackRef_False; + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -758,7 +892,9 @@ _PyStackRef tos; _PyStackRef nos; tos = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ nos = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { @@ -771,6 +907,7 @@ case _GUARD_TOS_UNICODE: { _PyStackRef value; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -783,6 +920,7 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ STAT_INC(TO_BOOL, hit); PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (value_o == &_Py_STR(empty)) { @@ -793,14 +931,16 @@ assert(Py_SIZE(value_o)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -808,15 +948,20 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -824,11 +969,13 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Invert(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -836,9 +983,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -846,7 +996,9 @@ _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { @@ -859,6 +1011,7 @@ case _GUARD_TOS_INT: { _PyStackRef value; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -872,7 +1025,9 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -886,12 +1041,16 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -900,7 +1059,9 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -914,12 +1075,16 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -928,7 +1093,9 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -942,12 +1109,16 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -955,7 +1126,9 @@ _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { @@ -968,6 +1141,7 @@ case _GUARD_TOS_FLOAT: { _PyStackRef value; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -981,7 +1155,9 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -992,14 +1168,20 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1008,7 +1190,9 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -1019,14 +1203,20 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1035,7 +1225,9 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -1046,14 +1238,20 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1062,7 +1260,9 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyUnicode_CheckExact(left_o)); @@ -1074,12 +1274,16 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1087,7 +1291,9 @@ _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); assert(PyUnicode_CheckExact(left_o)); assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(right))); @@ -1111,6 +1317,7 @@ PyObject *right_o = PyStackRef_AsPyObjectSteal(right); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyUnicode_Append(&temp, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1133,7 +1340,9 @@ _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); @@ -1155,7 +1364,9 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); @@ -1166,19 +1377,27 @@ PyObject *res_o = d->action(left_o, right_o); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1188,8 +1407,11 @@ _PyStackRef container; _PyStackRef res; stop = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ start = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ container = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -1201,15 +1423,16 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['container'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); res_o = PyObject_GetItem(PyStackRef_AsPyObjectBorrow(container), slice); Py_DECREF(slice); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); } stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(container); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1217,9 +1440,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -1229,9 +1455,13 @@ _PyStackRef container; _PyStackRef v; stop = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ start = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ container = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ v = stack_pointer[-4]; + /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -1243,27 +1473,30 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML, 'container'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), slice, PyStackRef_AsPyObjectBorrow(v)); Py_DECREF(slice); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); } - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = container; container = PyStackRef_NULL; - stack_pointer[-1] = container; + /* Variables=['v'ML, 'container'L]; base=-4; sp=0; logical_sp=-2 */ + stack_pointer[-3] = container; + /* Variables=['v'ML, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - stack_pointer[-2] = v; + /* Variables=['v'L, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ + stack_pointer[-4] = v; + /* Variables=['v'ML, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -2; + stack_pointer += -4; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ if (err) { JUMP_TO_ERROR(); } @@ -1275,7 +1508,9 @@ _PyStackRef list_st; _PyStackRef res; sub_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); @@ -1312,15 +1547,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = list_st; list_st = res; + /* Variables=['list_st'L, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = list_st; + /* Variables=['list_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = sub_st; sub_st = PyStackRef_NULL; + /* Variables=['list_st'ML, 'sub_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub_st; + /* Variables=['list_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1329,7 +1569,9 @@ _PyStackRef str_st; _PyStackRef res; sub_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ str_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *str = PyStackRef_AsPyObjectBorrow(str_st); assert(PyLong_CheckExact(sub)); @@ -1353,13 +1595,17 @@ PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(str_st); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectImmortal(res_o); + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1368,7 +1614,9 @@ _PyStackRef tuple_st; _PyStackRef res; sub_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ tuple_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st); assert(PyLong_CheckExact(sub)); @@ -1392,10 +1640,13 @@ res = PyStackRef_FromPyObjectNew(res_o); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['tuple_st'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = tuple_st; tuple_st = res; + /* Variables=['tuple_st'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = tuple_st; + /* Variables=['tuple_st'ML]; base=-2; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; @@ -1406,7 +1657,9 @@ _PyStackRef dict_st; _PyStackRef res; sub_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { @@ -1426,22 +1679,30 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = sub_st; sub_st = PyStackRef_NULL; + /* Variables=['dict_st'ML, 'sub_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub_st; + /* Variables=['dict_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = dict_st; dict_st = PyStackRef_NULL; + /* Variables=['dict_st'L, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = dict_st; + /* Variables=['dict_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (rc <= 0) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1449,6 +1710,7 @@ _PyStackRef container; _PyStackRef getitem; container = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container)); if (!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) { UOP_STAT_INC(uopcode, miss); @@ -1474,9 +1736,12 @@ } getitem = PyStackRef_FromPyObjectNew(getitem_o); STAT_INC(BINARY_OP, hit); + /* Variables=['container'ML, 'unused'M, 'getitem'L]; base=-2; sp=0; logical_sp=1 */ stack_pointer[0] = getitem; + /* Variables=['container'ML, 'unused'M, 'getitem'ML]; base=-2; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['container'ML, 'unused'M, 'getitem'ML]; base=-2; sp=1; logical_sp=1 */ break; } @@ -1486,15 +1751,21 @@ _PyStackRef container; _PyInterpreterFrame *new_frame; getitem = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ sub = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ container = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ new_frame = _PyFrame_PushUnchecked(tstate, getitem, 2, frame); new_frame->localsplus[0] = container; new_frame->localsplus[1] = sub; frame->return_offset = 6 ; + /* Variables=['new_frame'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -1503,16 +1774,20 @@ _PyStackRef list; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list = stack_pointer[-2 - (oparg-1)]; + /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list), PyStackRef_AsPyObjectSteal(v)); if (err < 0) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } @@ -1521,7 +1796,9 @@ _PyStackRef set; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ set = stack_pointer[-2 - (oparg-1)]; + /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_AddTakeRef((PySetObject *)PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectSteal(v)); @@ -1529,10 +1806,12 @@ if (err) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } @@ -1541,25 +1820,35 @@ _PyStackRef container; _PyStackRef v; sub = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ container = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ v = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub), PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; + /* Variables=['v'ML, 'container'ML, 'sub'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = sub; + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; + /* Variables=['v'ML, 'container'L, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = container; + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; + /* Variables=['v'L, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = v; + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (err) { JUMP_TO_ERROR(); } @@ -1571,8 +1860,11 @@ _PyStackRef list_st; _PyStackRef value; sub_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ value = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); @@ -1605,6 +1897,7 @@ PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(list_st); Py_DECREF(old_value); @@ -1617,8 +1910,11 @@ _PyStackRef dict_st; _PyStackRef value; sub = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ value = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { UOP_STAT_INC(uopcode, miss); @@ -1632,6 +1928,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1645,21 +1942,28 @@ _PyStackRef sub; _PyStackRef container; sub = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ container = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; + /* Variables=['container'ML, 'sub'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub; + /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; + /* Variables=['container'L, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = container; + /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (err) { JUMP_TO_ERROR(); } @@ -1671,12 +1975,14 @@ _PyStackRef res; oparg = CURRENT_OPARG(); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg <= MAX_INTRINSIC_1); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_UnaryFunctions[oparg].func(tstate, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1684,9 +1990,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1696,7 +2005,9 @@ _PyStackRef res; oparg = CURRENT_OPARG(); value1_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value2_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ assert(oparg <= MAX_INTRINSIC_2); PyObject *value1 = PyStackRef_AsPyObjectBorrow(value1_st); PyObject *value2 = PyStackRef_AsPyObjectBorrow(value2_st); @@ -1704,22 +2015,30 @@ PyObject *res_o = _PyIntrinsics_BinaryFunctions[oparg].func(tstate, value2, value1); _PyStackRef tmp = value1_st; value1_st = PyStackRef_NULL; + /* Variables=['value2_st'ML, 'value1_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = value1_st; + /* Variables=['value2_st'ML, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = value2_st; value2_st = PyStackRef_NULL; + /* Variables=['value2_st'L, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = value2_st; + /* Variables=['value2_st'ML, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1727,10 +2046,12 @@ _PyStackRef retval; _PyStackRef res; retval = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(EMPTY()); _Py_LeaveRecursiveCallPy(tstate); @@ -1741,9 +2062,12 @@ LOAD_IP(frame->return_offset); res = temp; LLTRACE_RESUME_FRAME(); + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1751,6 +2075,7 @@ _PyStackRef obj; _PyStackRef iter; obj = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ unaryfunc getter = NULL; PyObject *obj_o = PyStackRef_AsPyObjectBorrow(obj); PyObject *iter_o; @@ -1767,6 +2092,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1777,6 +2103,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1795,9 +2122,12 @@ JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); + /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1805,6 +2135,7 @@ _PyStackRef aiter; _PyStackRef awaitable; aiter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *awaitable_o = _PyEval_GetANext(PyStackRef_AsPyObjectBorrow(aiter)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1812,9 +2143,12 @@ JUMP_TO_ERROR(); } awaitable = PyStackRef_FromPyObjectSteal(awaitable_o); + /* Variables=['aiter'ML, 'awaitable'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = awaitable; + /* Variables=['aiter'ML, 'awaitable'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['aiter'ML, 'awaitable'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1823,11 +2157,13 @@ _PyStackRef iter; oparg = CURRENT_OPARG(); iterable = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1835,9 +2171,12 @@ JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); + /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1849,7 +2188,9 @@ _PyInterpreterFrame *gen_frame; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ receiver = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { UOP_STAT_INC(uopcode, miss); @@ -1868,7 +2209,9 @@ assert( 2 + oparg <= UINT16_MAX); frame->return_offset = (uint16_t)( 2 + oparg); gen_frame->previous = frame; + /* Variables=['receiver'ML, 'gen_frame'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1].bits = (uintptr_t)gen_frame; + /* Variables=['receiver'ML, 'gen_frame'ML]; base=-2; sp=0; logical_sp=0 */ break; } @@ -1877,6 +2220,7 @@ _PyStackRef value; oparg = CURRENT_OPARG(); retval = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); frame->instr_ptr++; PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); @@ -1886,6 +2230,7 @@ _PyStackRef temp = retval; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); tstate->exc_info = gen->gi_exc_state.previous_item; gen->gi_exc_state.previous_item = NULL; @@ -1906,15 +2251,19 @@ LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); + /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _POP_EXCEPT: { _PyStackRef exc_value; exc_value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyErr_StackItem *exc_info = tstate->exc_info; _PyFrame_SetStackPointer(frame, stack_pointer); Py_XSETREF(exc_info->exc_value, @@ -1923,6 +2272,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -1931,9 +2281,12 @@ oparg = CURRENT_OPARG(); assert(oparg < NUM_COMMON_CONSTANTS); value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -1954,9 +2307,12 @@ JUMP_TO_ERROR(); } bc = PyStackRef_FromPyObjectSteal(bc_o); + /* Variables=['bc'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = bc; + /* Variables=['bc'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['bc'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -1964,6 +2320,7 @@ _PyStackRef v; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); int err; @@ -1974,6 +2331,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1991,6 +2349,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2031,10 +2390,12 @@ _PyStackRef *top; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ top = &stack_pointer[-1 + oparg]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg, -1, top); Py_DECREF(seq_o); @@ -2044,6 +2405,7 @@ } stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['unused'A, 'top'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ break; } @@ -2053,6 +2415,7 @@ _PyStackRef val0; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg == 2); PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { @@ -2066,14 +2429,18 @@ STAT_INC(UNPACK_SEQUENCE, hit); val0 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 0)); val1 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 1)); + /* Variables=['val1'L, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = val1; + /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = val0; + /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer[-1] = val0; break; } @@ -2082,6 +2449,7 @@ _PyStackRef *values; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { @@ -2099,6 +2467,7 @@ } stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2110,6 +2479,7 @@ _PyStackRef *values; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyList_CheckExact(seq_o)) { @@ -2135,6 +2505,7 @@ UNLOCK_OBJECT(seq_o); stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2146,10 +2517,12 @@ _PyStackRef *top; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ top = &stack_pointer[(oparg & 0xFF) + (oparg >> 8)]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg & 0xFF, oparg >> 8, top); Py_DECREF(seq_o); @@ -2159,6 +2532,7 @@ } stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['unused'A, 'unused', 'unused'A, 'top'A]; base=-1; sp=(oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ break; } @@ -2167,22 +2541,29 @@ _PyStackRef v; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ v = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetAttr(PyStackRef_AsPyObjectBorrow(owner), name, PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = owner; owner = PyStackRef_NULL; + /* Variables=['v'ML, 'owner'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; + /* Variables=['v'ML, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; + /* Variables=['v'L, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = v; + /* Variables=['v'ML, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (err) { JUMP_TO_ERROR(); } @@ -2193,12 +2574,14 @@ _PyStackRef owner; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2212,12 +2595,14 @@ _PyStackRef v; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_SetItem(GLOBALS(), name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2257,9 +2642,12 @@ JUMP_TO_ERROR(); } locals = PyStackRef_FromPyObjectNew(l); + /* Variables=['locals'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = locals; + /* Variables=['locals'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['locals'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2276,9 +2664,12 @@ JUMP_TO_ERROR(); } v = PyStackRef_FromPyObjectSteal(v_o); + /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = v; + /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2295,6 +2686,7 @@ } stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'A]; base=0; sp=1; logical_sp=1 */ break; } @@ -2307,6 +2699,7 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['null'A]; base=0; sp=(oparg & 1); logical_sp=(oparg & 1) */ break; } @@ -2358,9 +2751,12 @@ res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2395,9 +2791,12 @@ res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2457,6 +2856,7 @@ _PyStackRef value; oparg = CURRENT_OPARG(); class_dict_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o; PyObject *name; PyObject *class_dict = PyStackRef_AsPyObjectBorrow(class_dict_st); @@ -2481,13 +2881,17 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(class_dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectSteal(value_o); + /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -2499,17 +2903,23 @@ value = _PyCell_GetStackRef(cell); stack_pointer = _PyFrame_GetStackPointer(frame); if (PyStackRef_IsNull(value)) { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_ERROR(); } + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2517,12 +2927,14 @@ _PyStackRef v; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); _PyFrame_SetStackPointer(frame, stack_pointer); PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -2546,6 +2958,7 @@ _PyStackRef str; oparg = CURRENT_OPARG(); pieces = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ STACKREFS_TO_PYOBJECTS(pieces, oparg, pieces_o); if (CONVERSION_FAILED(pieces_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2558,6 +2971,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ JUMP_TO_ERROR(); } PyObject *str_o = _PyUnicode_JoinArray(&_Py_STR(empty), pieces_o, oparg); @@ -2572,13 +2986,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ if (str_o == NULL) { JUMP_TO_ERROR(); } str = PyStackRef_FromPyObjectSteal(str_o); + /* Variables=['str'L]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer[0] = str; + /* Variables=['str'ML]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['str'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -2587,14 +3005,18 @@ _PyStackRef tup; oparg = CURRENT_OPARG(); values = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ PyObject *tup_o = _PyTuple_FromStackRefStealOnSuccess(values, oparg); if (tup_o == NULL) { JUMP_TO_ERROR(); } tup = PyStackRef_FromPyObjectStealMortal(tup_o); + /* Variables=['tup'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = tup; + /* Variables=['tup'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['tup'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -2603,6 +3025,7 @@ _PyStackRef list; oparg = CURRENT_OPARG(); values = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *list_o = _PyList_FromStackRefStealOnSuccess(values, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2610,9 +3033,12 @@ JUMP_TO_ERROR(); } list = PyStackRef_FromPyObjectStealMortal(list_o); + /* Variables=['list'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = list; + /* Variables=['list'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -2621,7 +3047,9 @@ _PyStackRef list_st; oparg = CURRENT_OPARG(); iterable_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list_st = stack_pointer[-2 - (oparg-1)]; + /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); PyObject *iterable = PyStackRef_AsPyObjectBorrow(iterable_st); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2643,6 +3071,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list_st'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2651,6 +3080,7 @@ assert(Py_IsNone(none_val)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list_st'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2662,13 +3092,16 @@ _PyStackRef set; oparg = CURRENT_OPARG(); iterable = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ set = stack_pointer[-2 - (oparg-1)]; + /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_Update(PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2683,6 +3116,7 @@ _PyStackRef set; oparg = CURRENT_OPARG(); values = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *set_o = PySet_New(NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2697,6 +3131,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ JUMP_TO_ERROR(); } int err = 0; @@ -2717,15 +3152,19 @@ if (err) { stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(set_o); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_ERROR(); } set = PyStackRef_FromPyObjectStealMortal(set_o); + /* Variables=['set'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = set; + /* Variables=['set'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -2734,6 +3173,7 @@ _PyStackRef map; oparg = CURRENT_OPARG(); values = &stack_pointer[-oparg*2]; + /* Variables=[]; base=-oparg*2; sp=0; logical_sp=-oparg*2 */ STACKREFS_TO_PYOBJECTS(values, oparg*2, values_o); if (CONVERSION_FAILED(values_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2746,6 +3186,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-oparg*2; sp=-oparg*2; logical_sp=-oparg*2 */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2765,13 +3206,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-oparg*2; sp=-oparg*2; logical_sp=-oparg*2 */ if (map_o == NULL) { JUMP_TO_ERROR(); } map = PyStackRef_FromPyObjectStealMortal(map_o); + /* Variables=['map'L]; base=-oparg*2; sp=-oparg*2; logical_sp=1 - oparg*2 */ stack_pointer[0] = map; + /* Variables=['map'ML]; base=-oparg*2; sp=-oparg*2; logical_sp=1 - oparg*2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['map'ML]; base=-oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ break; } @@ -2819,7 +3264,9 @@ _PyStackRef dict; oparg = CURRENT_OPARG(); update = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict = stack_pointer[-2 - (oparg - 1)]; + /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2838,6 +3285,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2845,6 +3293,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2857,8 +3306,11 @@ _PyStackRef callable; oparg = CURRENT_OPARG(); update = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict = stack_pointer[-2 - (oparg - 1)]; + /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ callable = stack_pointer[-5 - (oparg - 1)]; + /* Variables=[]; base=-5 - (oparg - 1); sp=0; logical_sp=-5 - (oparg - 1) */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); @@ -2871,6 +3323,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2878,6 +3331,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2890,8 +3344,11 @@ _PyStackRef dict_st; oparg = CURRENT_OPARG(); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ key = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ dict_st = stack_pointer[-3 - (oparg - 1)]; + /* Variables=[]; base=-3 - (oparg - 1); sp=0; logical_sp=-3 - (oparg - 1) */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2904,10 +3361,12 @@ if (err != 0) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict_st'ML, 'unused'MA]; base=-3 - (oparg - 1); sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict_st'ML, 'unused'MA]; base=-3 - (oparg - 1); sp=-2; logical_sp=-2 */ break; } @@ -2918,8 +3377,11 @@ _PyStackRef attr_st; oparg = CURRENT_OPARG(); self_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ class_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ global_super_st = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); @@ -2938,26 +3400,36 @@ PyObject *attr = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (attr == NULL) { JUMP_TO_ERROR(); } attr_st = PyStackRef_FromPyObjectSteal(attr); + /* Variables=['attr_st'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = attr_st; + /* Variables=['attr_st'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr_st'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -2969,8 +3441,11 @@ _PyStackRef self_or_null; oparg = CURRENT_OPARG(); self_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ class_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ global_super_st = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); @@ -2999,32 +3474,43 @@ } else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self_st); stack_pointer = _PyFrame_GetStackPointer(frame); self_or_null = PyStackRef_NULL; stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = global_super_st; global_super_st = self_or_null; + /* Variables=['global_super_st'L, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ stack_pointer[-2] = global_super_st; + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'L]; base=-3; sp=-1; logical_sp=-1 */ stack_pointer[-1] = class_st; + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ attr = PyStackRef_FromPyObjectSteal(attr_o); + /* Variables=['attr'L, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[0] = attr; + /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ + /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[1] = self_or_null; + /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-1; logical_sp=-1 */ break; } @@ -3034,6 +3520,7 @@ _PyStackRef *self_or_null; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ self_or_null = &stack_pointer[0]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1); PyObject *attr_o; @@ -3049,6 +3536,7 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3057,7 +3545,6 @@ } self_or_null[0] = PyStackRef_NULL; stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } } else { @@ -3066,6 +3553,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3073,18 +3561,21 @@ JUMP_TO_ERROR(); } stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } attr = PyStackRef_FromPyObjectSteal(attr_o); + /* Variables=['attr'L, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer += (oparg&1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=(oparg&1); logical_sp=(oparg&1) */ break; } case _GUARD_TYPE_VERSION: { _PyStackRef owner; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -3098,6 +3589,7 @@ case _GUARD_TYPE_VERSION_AND_LOCK: { _PyStackRef owner; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); @@ -3119,6 +3611,7 @@ case _CHECK_MANAGED_OBJECT_HAS_VALUES: { _PyStackRef owner; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); @@ -3133,6 +3626,7 @@ _PyStackRef owner; _PyStackRef attr; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t offset = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset); @@ -3153,7 +3647,9 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3164,6 +3660,7 @@ _PyStackRef owner; _PyStackRef attr; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t dict_version = (uint32_t)CURRENT_OPERAND0(); uint16_t index = (uint16_t)CURRENT_OPERAND1(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -3198,7 +3695,9 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3210,6 +3709,7 @@ _PyStackRef attr; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t hint = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); @@ -3266,7 +3766,9 @@ #else attr = PyStackRef_FromPyObjectNew(attr_o); #endif + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3277,6 +3779,7 @@ _PyStackRef owner; _PyStackRef attr; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t index = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **addr = (PyObject **)((char *)owner_o + index); @@ -3298,7 +3801,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; + /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; @@ -3307,6 +3812,7 @@ case _CHECK_ATTR_CLASS: { _PyStackRef owner; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { @@ -3325,6 +3831,7 @@ _PyStackRef owner; _PyStackRef attr; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); @@ -3332,7 +3839,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; + /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; @@ -3343,6 +3852,7 @@ _PyInterpreterFrame *new_frame; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *fget = (PyObject *)CURRENT_OPERAND0(); assert((oparg & 1) == 0); assert(Py_IS_TYPE(fget, &PyFunction_Type)); @@ -3367,7 +3877,9 @@ STAT_INC(LOAD_ATTR, hit); new_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(fget), 1, frame); new_frame->localsplus[0] = owner; + /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -3376,6 +3888,7 @@ case _GUARD_DORV_NO_DICT: { _PyStackRef owner; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); @@ -3394,7 +3907,9 @@ _PyStackRef owner; _PyStackRef value; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t offset = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); STAT_INC(STORE_ATTR, hit); @@ -3410,6 +3925,7 @@ UNLOCK_OBJECT(owner_o); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -3422,7 +3938,9 @@ _PyStackRef value; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t hint = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); @@ -3478,6 +3996,7 @@ STAT_INC(STORE_ATTR, hit); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -3489,7 +4008,9 @@ _PyStackRef owner; _PyStackRef value; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t index = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!LOCK_OBJECT(owner_o)) { @@ -3503,6 +4024,7 @@ UNLOCK_OBJECT(owner_o); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -3516,7 +4038,9 @@ _PyStackRef res; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert((oparg >> 5) <= Py_GE); @@ -3524,15 +4048,20 @@ PyObject *res_o = PyObject_RichCompare(left_o, right_o, oparg >> 5); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_ERROR(); } @@ -3549,9 +4078,12 @@ else { res = PyStackRef_FromPyObjectSteal(res_o); } + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -3561,7 +4093,9 @@ _PyStackRef res; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); STAT_INC(COMPARE_OP, hit); @@ -3571,9 +4105,12 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -3583,7 +4120,9 @@ _PyStackRef res; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { @@ -3603,9 +4142,12 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -3615,7 +4157,9 @@ _PyStackRef res; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); STAT_INC(COMPARE_OP, hit); @@ -3627,9 +4171,12 @@ assert((oparg & 0xf) == COMPARISON_NOT_EQUALS || (oparg & 0xf) == COMPARISON_EQUALS); assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -3639,24 +4186,34 @@ _PyStackRef b; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ int res = Py_Is(PyStackRef_AsPyObjectBorrow(left), PyStackRef_AsPyObjectBorrow(right)) ^ oparg; _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ b = res ? PyStackRef_True : PyStackRef_False; + /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; + /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -3666,29 +4223,39 @@ _PyStackRef b; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); _PyFrame_SetStackPointer(frame, stack_pointer); int res = PySequence_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; + /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; + /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -3698,7 +4265,9 @@ _PyStackRef b; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!(PySet_CheckExact(right_o) || PyFrozenSet_CheckExact(right_o))) { @@ -3710,22 +4279,30 @@ int res = _PySet_Contains((PySetObject *)right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; + /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; + /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -3735,7 +4312,9 @@ _PyStackRef b; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!PyDict_CheckExact(right_o)) { @@ -3747,22 +4326,30 @@ int res = PyDict_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; + /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; + /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -3772,7 +4359,9 @@ _PyStackRef rest; _PyStackRef match; match_type_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ exc_value_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); PyObject *match_type = PyStackRef_AsPyObjectBorrow(match_type_st); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3782,15 +4371,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; + /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match_type_st; + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; + /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = exc_value_st; + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } PyObject *match_o = NULL; @@ -3800,15 +4394,20 @@ &match_o, &rest_o); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; + /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match_type_st; + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; + /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = exc_value_st; + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_ERROR(); } @@ -3823,10 +4422,15 @@ } rest = PyStackRef_FromPyObjectSteal(rest_o); match = PyStackRef_FromPyObjectSteal(match_o); + /* Variables=['rest'L, 'match'L]; base=-2; sp=-2; logical_sp=0 */ stack_pointer[0] = rest; + /* Variables=['rest'ML, 'match'L]; base=-2; sp=-2; logical_sp=0 */ + /* Variables=['rest'ML, 'match'L]; base=-2; sp=-2; logical_sp=0 */ stack_pointer[1] = match; + /* Variables=['rest'ML, 'match'ML]; base=-2; sp=-2; logical_sp=0 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['rest'ML, 'match'ML]; base=-2; sp=0; logical_sp=0 */ break; } @@ -3835,7 +4439,9 @@ _PyStackRef left; _PyStackRef b; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyExceptionInstance_Check(left_o)); @@ -3850,13 +4456,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(right); stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; + /* Variables=['left'ML, 'b'L]; base=-2; sp=-1; logical_sp=0 */ stack_pointer[0] = b; + /* Variables=['left'ML, 'b'ML]; base=-2; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'b'ML]; base=-2; sp=0; logical_sp=0 */ break; } @@ -3866,7 +4476,9 @@ _PyStackRef res; oparg = CURRENT_OPARG(); fromlist = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ level = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportName(tstate, frame, name, @@ -3874,22 +4486,30 @@ PyStackRef_AsPyObjectBorrow(level)); _PyStackRef tmp = fromlist; fromlist = PyStackRef_NULL; + /* Variables=['level'ML, 'fromlist'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = fromlist; + /* Variables=['level'ML, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = level; level = PyStackRef_NULL; + /* Variables=['level'L, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = level; + /* Variables=['level'ML, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -3898,6 +4518,7 @@ _PyStackRef res; oparg = CURRENT_OPARG(); from = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportFrom(tstate, PyStackRef_AsPyObjectBorrow(from), name); @@ -3906,9 +4527,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['from'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['from'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['from'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -3920,6 +4544,7 @@ _PyStackRef value; _PyStackRef b; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (PyStackRef_IsNone(value)) { b = PyStackRef_True; } @@ -3928,11 +4553,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = b; + /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } + /* Variables=['b'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = b; + /* Variables=['b'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -3940,6 +4569,7 @@ _PyStackRef obj; _PyStackRef len; obj = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_ssize_t len_i = PyObject_Length(PyStackRef_AsPyObjectBorrow(obj)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3951,9 +4581,12 @@ JUMP_TO_ERROR(); } len = PyStackRef_FromPyObjectSteal(len_o); + /* Variables=['obj'ML, 'len'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = len; + /* Variables=['obj'ML, 'len'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['obj'ML, 'len'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -3964,8 +4597,11 @@ _PyStackRef attrs; oparg = CURRENT_OPARG(); names = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ type = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ subject = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ assert(PyTuple_CheckExact(PyStackRef_AsPyObjectBorrow(names))); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attrs_o = _PyEval_MatchClass(tstate, @@ -3974,19 +4610,26 @@ PyStackRef_AsPyObjectBorrow(names)); _PyStackRef tmp = names; names = PyStackRef_NULL; + /* Variables=['subject'ML, 'type'ML, 'names'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = names; + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = type; type = PyStackRef_NULL; + /* Variables=['subject'ML, 'type'L, 'names'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = type; + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = subject; subject = PyStackRef_NULL; + /* Variables=['subject'L, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = subject; + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (attrs_o) { assert(PyTuple_CheckExact(attrs_o)); attrs = PyStackRef_FromPyObjectSteal(attrs_o); @@ -3997,9 +4640,12 @@ } attrs = PyStackRef_None; } + /* Variables=['attrs'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = attrs; + /* Variables=['attrs'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attrs'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -4007,11 +4653,15 @@ _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? PyStackRef_True : PyStackRef_False; + /* Variables=['subject'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['subject'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4019,11 +4669,15 @@ _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? PyStackRef_True : PyStackRef_False; + /* Variables=['subject'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['subject'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4032,7 +4686,9 @@ _PyStackRef subject; _PyStackRef values_or_none; keys = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ subject = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *values_or_none_o = _PyEval_MatchKeys(tstate, PyStackRef_AsPyObjectBorrow(subject), PyStackRef_AsPyObjectBorrow(keys)); @@ -4041,9 +4697,12 @@ JUMP_TO_ERROR(); } values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o); + /* Variables=['subject'ML, 'keys'ML, 'values_or_none'L]; base=-2; sp=0; logical_sp=1 */ stack_pointer[0] = values_or_none; + /* Variables=['subject'ML, 'keys'ML, 'values_or_none'ML]; base=-2; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject'ML, 'keys'ML, 'values_or_none'ML]; base=-2; sp=1; logical_sp=1 */ break; } @@ -4051,11 +4710,13 @@ _PyStackRef iterable; _PyStackRef iter; iterable = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4063,9 +4724,12 @@ JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); + /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -4073,6 +4737,7 @@ _PyStackRef iterable; _PyStackRef iter; iterable = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); if (PyCoro_CheckExact(iterable_o)) { if (!(_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE))) { @@ -4099,11 +4764,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = iterable; iterable = iter; + /* Variables=['iterable'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iterable; + /* Variables=['iterable'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } + /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -4113,6 +4782,7 @@ _PyStackRef iter; _PyStackRef next; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o); @@ -4136,9 +4806,12 @@ } } next = PyStackRef_FromPyObjectSteal(next_o); + /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4147,6 +4820,7 @@ case _ITER_CHECK_LIST: { _PyStackRef iter; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyListIter_Type) { UOP_STAT_INC(uopcode, miss); @@ -4172,6 +4846,7 @@ case _GUARD_NOT_EXHAUSTED_LIST: { _PyStackRef iter; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ #ifndef Py_GIL_DISABLED PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyListIterObject *it = (_PyListIterObject *)iter_o; @@ -4198,6 +4873,7 @@ _PyStackRef iter; _PyStackRef next; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyListIterObject *it = (_PyListIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyListIter_Type); @@ -4227,15 +4903,19 @@ assert(it->it_index < PyList_GET_SIZE(seq)); next = PyStackRef_FromPyObjectNew(PyList_GET_ITEM(seq, it->it_index++)); #endif + /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _ITER_CHECK_TUPLE: { _PyStackRef iter; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTupleIter_Type) { UOP_STAT_INC(uopcode, miss); @@ -4255,6 +4935,7 @@ case _GUARD_NOT_EXHAUSTED_TUPLE: { _PyStackRef iter; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyTupleIterObject *it = (_PyTupleIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -4277,6 +4958,7 @@ _PyStackRef iter; _PyStackRef next; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyTupleIterObject *it = (_PyTupleIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -4287,15 +4969,19 @@ assert(seq); assert(it->it_index < PyTuple_GET_SIZE(seq)); next = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq, it->it_index++)); + /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _ITER_CHECK_RANGE: { _PyStackRef iter; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { UOP_STAT_INC(uopcode, miss); @@ -4315,6 +5001,7 @@ case _GUARD_NOT_EXHAUSTED_RANGE: { _PyStackRef iter; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { @@ -4328,6 +5015,7 @@ _PyStackRef iter; _PyStackRef next; iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); #ifdef Py_GIL_DISABLED @@ -4342,9 +5030,12 @@ JUMP_TO_ERROR(); } next = PyStackRef_FromPyObjectSteal(res); + /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4353,6 +5044,7 @@ _PyInterpreterFrame *gen_frame; oparg = CURRENT_OPARG(); iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(gen) != &PyGen_Type) { UOP_STAT_INC(uopcode, miss); @@ -4377,9 +5069,12 @@ tstate->exc_info = &gen->gi_exc_state; gen_frame->previous = frame; frame->return_offset = (uint16_t)( 2 + oparg); + /* Variables=['iter'ML, 'gen_frame'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0].bits = (uintptr_t)gen_frame; + /* Variables=['iter'ML, 'gen_frame'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML, 'gen_frame'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4389,12 +5084,14 @@ _PyStackRef self_or_null; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg <= SPECIAL_MAX); PyObject *owner_o = PyStackRef_AsPyObjectSteal(owner); PyObject *name = _Py_SpecialMethods[oparg].name; PyObject *self_or_null_o; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PyObject_LookupSpecialMethod(owner_o, name, &self_or_null_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4411,10 +5108,15 @@ attr = PyStackRef_FromPyObjectSteal(attr_o); self_or_null = self_or_null_o == NULL ? PyStackRef_NULL : PyStackRef_FromPyObjectSteal(self_or_null_o); + /* Variables=['attr'L, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ stack_pointer[0] = attr; + /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ + /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ stack_pointer[1] = self_or_null; + /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=-1; logical_sp=1 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4425,9 +5127,13 @@ _PyStackRef exit_func; _PyStackRef res; val = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ lasti = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ exit_self = stack_pointer[-4]; + /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ exit_func = stack_pointer[-5]; + /* Variables=[]; base=-5; sp=0; logical_sp=-5 */ PyObject *exc, *tb; PyObject *val_o = PyStackRef_AsPyObjectBorrow(val); PyObject *exit_func_o = PyStackRef_AsPyObjectBorrow(exit_func); @@ -4450,9 +5156,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'L]; base=-5; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'ML]; base=-5; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'ML]; base=-5; sp=1; logical_sp=1 */ break; } @@ -4461,6 +5170,7 @@ _PyStackRef prev_exc; _PyStackRef new_exc; exc = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyErr_StackItem *exc_info = tstate->exc_info; if (exc_info->exc_value != NULL) { prev_exc = PyStackRef_FromPyObjectSteal(exc_info->exc_value); @@ -4471,16 +5181,22 @@ assert(PyStackRef_ExceptionInstanceCheck(exc)); exc_info->exc_value = PyStackRef_AsPyObjectNew(exc); new_exc = exc; + /* Variables=['prev_exc'L, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = prev_exc; + /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = new_exc; + /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT: { _PyStackRef owner; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); @@ -4494,6 +5210,7 @@ case _GUARD_KEYS_VERSION: { _PyStackRef owner; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t keys_version = (uint32_t)CURRENT_OPERAND0(); PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; @@ -4511,6 +5228,7 @@ _PyStackRef self; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -4518,10 +5236,15 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); attr = PyStackRef_FromPyObjectNew(descr); self = owner; + /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4531,6 +5254,7 @@ _PyStackRef self; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert(oparg & 1); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); @@ -4539,10 +5263,15 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); attr = PyStackRef_FromPyObjectNew(descr); self = owner; + /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4551,19 +5280,24 @@ _PyStackRef attr; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert((oparg & 1) == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); + /* Variables=['attr'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -4572,6 +5306,7 @@ _PyStackRef attr; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert((oparg & 1) == 0); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); @@ -4579,19 +5314,24 @@ assert(descr != NULL); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); + /* Variables=['attr'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _CHECK_ATTR_METHOD_LAZY_DICT: { _PyStackRef owner; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t dictoffset = (uint16_t)CURRENT_OPERAND0(); char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); @@ -4608,6 +5348,7 @@ _PyStackRef self; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -4615,10 +5356,15 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); attr = PyStackRef_FromPyObjectNew(descr); self = owner; + /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4628,8 +5374,11 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -4656,8 +5405,11 @@ _PyInterpreterFrame *new_frame; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -4675,13 +5427,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { JUMP_TO_ERROR(); } new_frame = temp; + /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -4689,6 +5445,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { @@ -4720,7 +5477,9 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { @@ -4748,7 +5507,9 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyStackRef_IsNull(self_or_null[0])); assert(Py_TYPE(callable_o) == &PyMethod_Type); @@ -4766,6 +5527,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); @@ -4785,8 +5547,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif @@ -4815,6 +5580,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4841,13 +5607,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -4856,7 +5626,9 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ if (!PyStackRef_IsNull(null[0])) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -4873,7 +5645,9 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ assert(PyStackRef_IsNull(self_or_null[0])); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); STAT_INC(CALL, hit); @@ -4899,7 +5673,9 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; @@ -4915,6 +5691,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; @@ -4937,8 +5714,11 @@ oparg = 0; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -4947,9 +5727,12 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -4961,8 +5744,11 @@ oparg = 1; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -4971,9 +5757,12 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -4985,8 +5774,11 @@ oparg = 2; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -4995,9 +5787,12 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5009,8 +5804,11 @@ oparg = 3; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -5019,9 +5817,12 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5033,8 +5834,11 @@ oparg = 4; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -5043,9 +5847,12 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5056,8 +5863,11 @@ _PyInterpreterFrame *new_frame; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -5066,19 +5876,24 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _PUSH_FRAME: { _PyInterpreterFrame *new_frame; new_frame = (_PyInterpreterFrame *)stack_pointer[-1].bits; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -5097,8 +5912,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); arg = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ null = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); @@ -5112,9 +5930,12 @@ } STAT_INC(CALL, hit); res = PyStackRef_FromPyObjectNew(Py_TYPE(arg_o)); + /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; + /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5128,8 +5949,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); arg = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ null = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); @@ -5147,6 +5971,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5154,9 +5979,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -5167,8 +5995,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); arg = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ null = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); @@ -5186,6 +6017,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5193,9 +6025,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -5205,8 +6040,11 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); (void)args; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -5256,21 +6094,26 @@ _PyInterpreterFrame *init_frame; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ init = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *shim = _PyFrame_PushTrampolineUnchecked( tstate, (PyCodeObject *)&_Py_InitCleanup, 1, frame); stack_pointer = _PyFrame_GetStackPointer(frame); assert(_PyFrame_GetBytecode(shim)[0].op.code == EXIT_INIT_CHECK); assert(_PyFrame_GetBytecode(shim)[1].op.code == RETURN_VALUE); - shim->localsplus[0] = PyStackRef_DUP(self[0]); + shim->localsplus[0] = PyStackRef_NULL; + shim->localsplus[1] = PyStackRef_DUP(self[0]); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, init[0], NULL, args-1, oparg+1, NULL, shim); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FrameClearAndPop(tstate, shim); @@ -5280,16 +6123,19 @@ init_frame = temp; frame->return_offset = 1 + INLINE_CACHE_ENTRIES_CALL; tstate->py_recursion_remaining--; + /* Variables=['init_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0].bits = (uintptr_t)init_frame; + /* Variables=['init_frame'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['init_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _EXIT_INIT_CHECK: { _PyStackRef should_be_none; should_be_none = stack_pointer[-1]; - assert(STACK_LEVEL() == 2); + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_IsNone(should_be_none)) { _PyFrame_SetStackPointer(frame, stack_pointer); PyErr_Format(PyExc_TypeError, @@ -5300,6 +6146,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -5310,8 +6157,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyType_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); @@ -5347,6 +6197,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5369,13 +6220,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5386,8 +6241,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -5423,6 +6281,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5430,9 +6289,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5443,8 +6305,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -5480,6 +6345,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5506,13 +6372,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5523,8 +6393,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -5564,6 +6437,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5587,13 +6461,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5604,8 +6482,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -5640,13 +6521,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5657,8 +6542,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; @@ -5689,7 +6577,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = callable; callable = res; + /* Variables=['callable'L, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-2 - oparg] = callable; + /* Variables=['callable'ML, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -5702,6 +6592,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5711,8 +6602,11 @@ _PyStackRef callable; oparg = CURRENT_OPARG(); arg = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ self = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ assert(oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *self_o = PyStackRef_AsPyObjectBorrow(self); @@ -5735,11 +6629,13 @@ UNLOCK_OBJECT(self_o); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5761,8 +6657,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -5820,13 +6719,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5837,8 +6740,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -5882,6 +6788,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5907,13 +6814,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5924,8 +6835,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ assert(oparg == 0 || oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -5969,6 +6883,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5976,9 +6891,12 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5989,8 +6907,11 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -6033,6 +6954,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6058,13 +6980,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6078,9 +7004,13 @@ _PyStackRef kwnames_out; oparg = CURRENT_OPARG(); kwnames_in = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ args = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ self_or_null = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -6094,7 +7024,9 @@ stack_pointer = _PyFrame_GetStackPointer(frame); } kwnames_out = kwnames_in; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames_out; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ break; } @@ -6108,9 +7040,13 @@ _PyInterpreterFrame *new_frame; oparg = CURRENT_OPARG(); kwnames = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ args = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ self_or_null = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -6131,18 +7067,23 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (temp == NULL) { JUMP_TO_ERROR(); } new_frame = temp; + /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer[0].bits = (uintptr_t)new_frame; + /* Variables=['new_frame'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ break; } @@ -6150,6 +7091,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { @@ -6169,7 +7111,9 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); null = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { @@ -6197,7 +7141,9 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); self_or_null = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ assert(PyStackRef_IsNull(self_or_null[0])); _PyStackRef callable_s = callable[0]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable_s); @@ -6215,6 +7161,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); @@ -6235,9 +7182,13 @@ _PyStackRef res; oparg = CURRENT_OPARG(); kwnames = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ args = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ self_or_null = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif @@ -6253,7 +7204,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -6269,6 +7222,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ JUMP_TO_ERROR(); } PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); @@ -6281,6 +7235,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6302,13 +7257,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ break; } @@ -6319,8 +7278,11 @@ _PyStackRef tuple; _PyStackRef kwargs_out; kwargs_in = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ callargs = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ func = stack_pointer[-4]; + /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs); if (PyTuple_CheckExact(callargs_o)) { tuple = callargs; @@ -6342,15 +7304,19 @@ kwargs_out = kwargs_in; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func'ML, 'unused'M]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs); stack_pointer = _PyFrame_GetStackPointer(frame); tuple = PyStackRef_FromPyObjectSteal(tuple_o); stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-2] = tuple; + /* Variables=['func'ML, 'unused'M, 'tuple'ML, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ + /* Variables=['func'ML, 'unused'M, 'tuple'ML, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-1] = kwargs_out; + /* Variables=['func'ML, 'unused'M, 'tuple'ML, 'kwargs_out'ML]; base=-4; sp=0; logical_sp=0 */ break; } @@ -6360,6 +7326,7 @@ _PyStackRef codeobj_st; _PyStackRef func; codeobj_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *codeobj = PyStackRef_AsPyObjectBorrow(codeobj_st); _PyFrame_SetStackPointer(frame, stack_pointer); PyFunctionObject *func_obj = (PyFunctionObject *) @@ -6367,6 +7334,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(codeobj_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6376,9 +7344,12 @@ _PyFunction_SetVersion( func_obj, ((PyCodeObject *)codeobj)->co_version); func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj); + /* Variables=['func'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = func; + /* Variables=['func'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -6388,7 +7359,9 @@ _PyStackRef func_out; oparg = CURRENT_OPARG(); func_in = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ attr_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); func_out = func_in; @@ -6398,9 +7371,12 @@ PyObject **ptr = (PyObject **)(((char *)func) + offset); assert(*ptr == NULL); *ptr = attr; + /* Variables=['func_out'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = func_out; + /* Variables=['func_out'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_out'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -6430,9 +7406,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen); LLTRACE_RESUME_FRAME(); + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -6441,6 +7420,7 @@ _PyStackRef slice; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ PyObject *start_o = PyStackRef_AsPyObjectBorrow(args[0]); PyObject *stop_o = PyStackRef_AsPyObjectBorrow(args[1]); PyObject *step_o = oparg == 3 ? PyStackRef_AsPyObjectBorrow(args[2]) : NULL; @@ -6455,13 +7435,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ if (slice_o == NULL) { JUMP_TO_ERROR(); } slice = PyStackRef_FromPyObjectStealMortal(slice_o); + /* Variables=['slice'L]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer[0] = slice; + /* Variables=['slice'ML]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['slice'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -6470,6 +7454,7 @@ _PyStackRef result; oparg = CURRENT_OPARG(); value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ conversion_func conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = _PyEval_ConversionFuncs[oparg]; @@ -6478,6 +7463,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6485,9 +7471,12 @@ JUMP_TO_ERROR(); } result = PyStackRef_FromPyObjectSteal(result_o); + /* Variables=['result'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = result; + /* Variables=['result'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['result'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -6495,6 +7484,7 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6502,6 +7492,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6513,11 +7504,13 @@ else { res = value; stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -6526,27 +7519,37 @@ _PyStackRef value; _PyStackRef res; fmt_spec = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(PyStackRef_AsPyObjectBorrow(value), PyStackRef_AsPyObjectBorrow(fmt_spec)); _PyStackRef tmp = fmt_spec; fmt_spec = PyStackRef_NULL; + /* Variables=['value'ML, 'fmt_spec'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = fmt_spec; + /* Variables=['value'ML, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = value; value = PyStackRef_NULL; + /* Variables=['value'L, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = value; + /* Variables=['value'ML, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -6555,11 +7558,15 @@ _PyStackRef top; oparg = CURRENT_OPARG(); bottom = stack_pointer[-1 - (oparg-1)]; + /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ assert(oparg > 0); top = PyStackRef_DUP(bottom); + /* Variables=['bottom'ML, 'unused'MA, 'top'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer[0] = top; + /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ break; } @@ -6569,7 +7576,9 @@ _PyStackRef res; oparg = CURRENT_OPARG(); rhs = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ lhs = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *lhs_o = PyStackRef_AsPyObjectBorrow(lhs); PyObject *rhs_o = PyStackRef_AsPyObjectBorrow(rhs); assert(_PyEval_BinaryOps[oparg]); @@ -6583,15 +7592,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = lhs; lhs = res; + /* Variables=['lhs'L, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = lhs; + /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = rhs; rhs = PyStackRef_NULL; + /* Variables=['lhs'ML, 'rhs'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = rhs; + /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -6600,7 +7614,9 @@ _PyStackRef *bottom; oparg = CURRENT_OPARG(); top = &stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ bottom = &stack_pointer[-2 - (oparg-2)]; + /* Variables=[]; base=-2 - (oparg-2); sp=0; logical_sp=-2 - (oparg-2) */ _PyStackRef temp = bottom[0]; bottom[0] = top[0]; top[0] = temp; @@ -6629,9 +7645,11 @@ case _GUARD_IS_TRUE_POP: { _PyStackRef flag; flag = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int is_true = PyStackRef_IsTrue(flag); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (!is_true) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -6642,9 +7660,11 @@ case _GUARD_IS_FALSE_POP: { _PyStackRef flag; flag = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int is_false = PyStackRef_IsFalse(flag); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (!is_false) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -6655,10 +7675,12 @@ case _GUARD_IS_NONE_POP: { _PyStackRef val; val = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int is_none = PyStackRef_IsNone(val); if (!is_none) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6669,15 +7691,18 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _GUARD_IS_NOT_NONE_POP: { _PyStackRef val; val = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int is_none = PyStackRef_IsNone(val); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6790,9 +7815,12 @@ _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectNew(ptr); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -6800,16 +7828,21 @@ _PyStackRef pop; _PyStackRef value; pop = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectNew(ptr); + /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -6817,9 +7850,12 @@ _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectImmortal(ptr); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -6827,16 +7863,21 @@ _PyStackRef pop; _PyStackRef value; pop = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectImmortal(ptr); + /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -6845,22 +7886,29 @@ _PyStackRef pop1; _PyStackRef value; pop2 = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ pop1 = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['pop1'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop2); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop1); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectImmortal(ptr); + /* Variables=['value'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index c75371d12b0ba1..225e73b9203f92 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -19,6 +19,7 @@ TARGET(BINARY_OP) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP; (void)(opcode); @@ -34,16 +35,30 @@ _PyStackRef res; // _SPECIALIZE_BINARY_OP { - rhs = stack_pointer[-1]; - lhs = stack_pointer[-2]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + rhs = _tos; + lhs = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['lhs'ML, 'rhs'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = rhs; + /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_BinaryOp(lhs, rhs, next_instr, oparg, LOCALS_ARRAY); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = rhs; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['lhs'ML]; base=-1; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(BINARY_OP); @@ -55,9 +70,16 @@ /* Skip 4 cache entries */ // _BINARY_OP { + /* Variables=['lhs'ML, 'rhs'L]; base=-1; sp=0; logical_sp=1 */ PyObject *lhs_o = PyStackRef_AsPyObjectBorrow(lhs); PyObject *rhs_o = PyStackRef_AsPyObjectBorrow(rhs); assert(_PyEval_BinaryOps[oparg]); + /* Variables=['lhs'ML, 'rhs'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = rhs; + /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_BinaryOps[oparg](lhs_o, rhs_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -68,20 +90,32 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = lhs; lhs = res; + /* Variables=['lhs'L, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = lhs; + /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = rhs; rhs = PyStackRef_NULL; + /* Variables=['lhs'ML, 'rhs'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = rhs; + /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ } + _PyStackRef _tmp; + _tmp = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_ADD_FLOAT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_ADD_FLOAT; (void)(opcode); @@ -98,9 +132,13 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -108,11 +146,16 @@ } // _GUARD_NOS_FLOAT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ right = value; - left = stack_pointer[-2]; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -121,6 +164,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_ADD_FLOAT { + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -131,16 +175,20 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - JUMP_TO_LABEL(pop_2_error); + JUMP_TO_LABEL(pop_1_error); } } - stack_pointer[-2] = res; + _PyStackRef _tmp; + _tmp = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_ADD_INT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_ADD_INT; (void)(opcode); @@ -157,9 +205,13 @@ _PyStackRef res; // _GUARD_TOS_INT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -167,11 +219,16 @@ } // _GUARD_NOS_INT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ right = value; - left = stack_pointer[-2]; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -180,11 +237,18 @@ /* Skip 5 cache entries */ // _BINARY_OP_ADD_INT { + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -195,13 +259,17 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - stack_pointer[-2] = res; - stack_pointer += -1; + _PyStackRef _tmp; + _tmp = res; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_ADD_UNICODE) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_ADD_UNICODE; (void)(opcode); @@ -220,9 +288,13 @@ _PyStackRef res; // _GUARD_TOS_UNICODE { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -230,11 +302,16 @@ } // _GUARD_NOS_UNICODE { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ tos = value; - nos = stack_pointer[-2]; + nos = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { + _PyStackRef _tmp; + _tmp = tos; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -243,6 +320,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_ADD_UNICODE { + /* Variables=['nos'ML, 'tos'L]; base=-1; sp=0; logical_sp=1 */ right = tos; left = nos; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -254,17 +332,21 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); if (res_o == NULL) { - JUMP_TO_LABEL(pop_2_error); + JUMP_TO_LABEL(pop_1_error); } res = PyStackRef_FromPyObjectSteal(res_o); } - stack_pointer[-2] = res; + _PyStackRef _tmp; + _tmp = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_EXTEND) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_EXTEND; (void)(opcode); @@ -281,18 +363,32 @@ /* Skip 1 cache entry */ // _GUARD_BINARY_OP_EXTEND { - right = stack_pointer[-1]; - left = stack_pointer[-2]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + right = _tos; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = read_obj(&this_instr[2].cache); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr; assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5); assert(d && d->guard); + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = d->guard(left_o, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (!res) { + _PyStackRef _tmp; + _tmp = right; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML]; base=-1; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -301,6 +397,7 @@ /* Skip -4 cache entry */ // _BINARY_OP_EXTEND { + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyObject *descr = read_obj(&this_instr[2].cache); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); @@ -311,24 +408,30 @@ PyObject *res_o = d->action(left_o, right_o); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ res = PyStackRef_FromPyObjectSteal(res_o); } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_INPLACE_ADD_UNICODE) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_INPLACE_ADD_UNICODE; (void)(opcode); @@ -346,9 +449,13 @@ _PyStackRef right; // _GUARD_TOS_UNICODE { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -356,11 +463,16 @@ } // _GUARD_NOS_UNICODE { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ tos = value; - nos = stack_pointer[-2]; + nos = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { + _PyStackRef _tmp; + _tmp = tos; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -369,6 +481,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_INPLACE_ADD_UNICODE { + /* Variables=['nos'ML, 'tos'L]; base=-1; sp=0; logical_sp=1 */ right = tos; left = nos; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -384,6 +497,9 @@ _PyStackRef *target_local = &GETLOCAL(next_oparg); assert(PyUnicode_CheckExact(left_o)); if (PyStackRef_AsPyObjectBorrow(*target_local) != left_o) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -393,8 +509,9 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); PyObject *temp = PyStackRef_AsPyObjectSteal(*target_local); PyObject *right_o = PyStackRef_AsPyObjectSteal(right); - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyUnicode_Append(&temp, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -411,10 +528,18 @@ SKIP_OVER(1); #endif } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_MULTIPLY_FLOAT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_MULTIPLY_FLOAT; (void)(opcode); @@ -431,9 +556,13 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -441,11 +570,16 @@ } // _GUARD_NOS_FLOAT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ right = value; - left = stack_pointer[-2]; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -454,6 +588,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_MULTIPLY_FLOAT { + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -464,16 +599,20 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - JUMP_TO_LABEL(pop_2_error); + JUMP_TO_LABEL(pop_1_error); } } - stack_pointer[-2] = res; + _PyStackRef _tmp; + _tmp = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_MULTIPLY_INT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_MULTIPLY_INT; (void)(opcode); @@ -490,9 +629,13 @@ _PyStackRef res; // _GUARD_TOS_INT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -500,11 +643,16 @@ } // _GUARD_NOS_INT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ right = value; - left = stack_pointer[-2]; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -513,11 +661,18 @@ /* Skip 5 cache entries */ // _BINARY_OP_MULTIPLY_INT { + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -528,13 +683,17 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - stack_pointer[-2] = res; - stack_pointer += -1; + _PyStackRef _tmp; + _tmp = res; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_SUBSCR_DICT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_DICT; (void)(opcode); @@ -549,17 +708,27 @@ _PyStackRef sub_st; _PyStackRef res; /* Skip 5 cache entries */ - sub_st = stack_pointer[-1]; - dict_st = stack_pointer[-2]; + sub_st = _tos; + dict_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } STAT_INC(BINARY_OP, hit); PyObject *res_o; + /* Variables=['dict_st'ML, 'sub_st'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = sub_st; + /* Variables=['dict_st'ML, 'sub_st'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int rc = PyDict_GetItemRef(dict, sub, &res_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -571,26 +740,32 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = sub_st; sub_st = PyStackRef_NULL; + /* Variables=['dict_st'ML, 'sub_st'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = sub_st; + /* Variables=['dict_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = dict_st; dict_st = PyStackRef_NULL; + /* Variables=['dict_st'L, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = dict_st; + /* Variables=['dict_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (rc <= 0) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_SUBSCR_GETITEM) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_GETITEM; (void)(opcode); @@ -608,7 +783,11 @@ /* Skip 5 cache entries */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -616,9 +795,14 @@ } // _BINARY_OP_SUBSCR_CHECK_FUNC { - container = stack_pointer[-2]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + container = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container)); if (!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -626,6 +810,9 @@ PyHeapTypeObject *ht = (PyHeapTypeObject *)tp; PyObject *getitem_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(ht->_spec_cache.getitem); if (getitem_o == NULL) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -633,6 +820,9 @@ assert(PyFunction_Check(getitem_o)); uint32_t cached_version = FT_ATOMIC_LOAD_UINT32_RELAXED(ht->_spec_cache.getitem_version); if (((PyFunctionObject *)getitem_o)->func_version != cached_version) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -640,6 +830,9 @@ PyCodeObject *code = (PyCodeObject *)PyFunction_GET_CODE(getitem_o); assert(code->co_argcount == 2); if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -649,7 +842,8 @@ } // _BINARY_OP_SUBSCR_INIT_CALL { - sub = stack_pointer[-1]; + /* Variables=['container'ML, '_tos'L, 'getitem'L]; base=-1; sp=0; logical_sp=2 */ + sub = _tos; new_frame = _PyFrame_PushUnchecked(tstate, getitem, 2, frame); new_frame->localsplus[0] = container; new_frame->localsplus[1] = sub; @@ -657,10 +851,12 @@ } // _PUSH_FRAME { + /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -670,10 +866,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_SUBSCR_LIST_INT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_LIST_INT; (void)(opcode); @@ -690,9 +894,13 @@ _PyStackRef res; // _GUARD_TOS_INT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -701,27 +909,47 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBSCR_LIST_INT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ sub_st = value; - list_st = stack_pointer[-2]; + list_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); if (!PyList_CheckExact(list)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; #ifdef Py_GIL_DISABLED + /* Variables=['list_st'ML, 'sub_st'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = sub_st; + /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyList_GetItemRef((PyListObject*)list, index); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + _PyStackRef _tmp; + _tmp = sub_st; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list_st'ML]; base=-1; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -730,6 +958,9 @@ res = PyStackRef_FromPyObjectSteal(res_o); #else if (index >= PyList_GET_SIZE(list)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -738,25 +969,41 @@ PyObject *res_o = PyList_GET_ITEM(list, index); assert(res_o != NULL); res = PyStackRef_FromPyObjectNew(res_o); + stack_pointer += 1; #endif STAT_INC(BINARY_OP, hit); + /* Variables=['list_st'ML, 'sub_st'L]; base=-1; sp=1; logical_sp=1 */ + stack_pointer[-1] = sub_st; + /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = list_st; list_st = res; + /* Variables=['list_st'L, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = list_st; + /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = sub_st; sub_st = PyStackRef_NULL; + /* Variables=['list_st'ML, 'sub_st'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = sub_st; + /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ } + _PyStackRef _tmp; + _tmp = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_SUBSCR_STR_INT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_STR_INT; (void)(opcode); @@ -775,9 +1022,13 @@ _PyStackRef res; // _GUARD_TOS_INT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -785,11 +1036,16 @@ } // _GUARD_NOS_UNICODE { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ tos = value; - nos = stack_pointer[-2]; + nos = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { + _PyStackRef _tmp; + _tmp = tos; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -798,6 +1054,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBSCR_STR_INT { + /* Variables=['nos'ML, 'tos'L]; base=-1; sp=0; logical_sp=1 */ sub_st = tos; str_st = nos; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); @@ -805,18 +1062,27 @@ assert(PyLong_CheckExact(sub)); assert(PyUnicode_CheckExact(str)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (PyUnicode_GET_LENGTH(str) <= index) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } Py_UCS4 c = PyUnicode_READ_CHAR(str, index); if (Py_ARRAY_LENGTH(_Py_SINGLETON(strings).ascii) <= c) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -824,20 +1090,22 @@ STAT_INC(BINARY_OP, hit); PyObject *res_o = (PyObject*)&_Py_SINGLETON(strings).ascii[c]; PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(str_st); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectImmortal(res_o); } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_SUBSCR_TUPLE_INT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_TUPLE_INT; (void)(opcode); @@ -854,9 +1122,13 @@ _PyStackRef res; // _GUARD_TOS_INT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -865,23 +1137,34 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBSCR_TUPLE_INT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ sub_st = value; - tuple_st = stack_pointer[-2]; + tuple_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st); assert(PyLong_CheckExact(sub)); if (!PyTuple_CheckExact(tuple)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (index >= PyTuple_GET_SIZE(tuple)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -891,19 +1174,26 @@ assert(res_o != NULL); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); res = PyStackRef_FromPyObjectNew(res_o); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = tuple_st; tuple_st = res; + /* Variables=['tuple_st'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = tuple_st; + /* Variables=['tuple_st'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } + _PyStackRef _tmp; + _tmp = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_SUBTRACT_FLOAT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBTRACT_FLOAT; (void)(opcode); @@ -920,9 +1210,13 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -930,11 +1224,16 @@ } // _GUARD_NOS_FLOAT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ right = value; - left = stack_pointer[-2]; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -943,6 +1242,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBTRACT_FLOAT { + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -953,16 +1253,20 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - JUMP_TO_LABEL(pop_2_error); + JUMP_TO_LABEL(pop_1_error); } } - stack_pointer[-2] = res; + _PyStackRef _tmp; + _tmp = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_OP_SUBTRACT_INT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBTRACT_INT; (void)(opcode); @@ -979,9 +1283,13 @@ _PyStackRef res; // _GUARD_TOS_INT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -989,11 +1297,16 @@ } // _GUARD_NOS_INT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ right = value; - left = stack_pointer[-2]; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1002,11 +1315,18 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBTRACT_INT { + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1017,13 +1337,17 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - stack_pointer[-2] = res; - stack_pointer += -1; + _PyStackRef _tmp; + _tmp = res; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(BINARY_SLICE) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_SLICE; (void)(opcode); @@ -1037,15 +1361,23 @@ _PyStackRef res; // _SPECIALIZE_BINARY_SLICE { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ #if ENABLE_SPECIALIZATION OPCODE_DEFERRED_INC(BINARY_SLICE); #endif /* ENABLE_SPECIALIZATION */ } // _BINARY_SLICE { - stop = stack_pointer[-1]; - start = stack_pointer[-2]; - container = stack_pointer[-3]; + /* Variables=['container'M, 'start'M, '_tos'L]; base=-2; sp=0; logical_sp=1 */ + stop = _tos; + start = stack_pointer[-1]; + container = stack_pointer[-2]; + /* Variables=['container'ML, 'start'ML, 'stop'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = stop; + /* Variables=['container'ML, 'start'ML, 'stop'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['container'ML, 'start'ML, 'stop'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -1057,15 +1389,16 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['container'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); res_o = PyObject_GetItem(PyStackRef_AsPyObjectBorrow(container), slice); Py_DECREF(slice); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); } stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(container); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1074,13 +1407,14 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(BUILD_LIST) { + assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_LIST; (void)(opcode); @@ -1090,7 +1424,14 @@ INSTRUCTION_STATS(BUILD_LIST); _PyStackRef *values; _PyStackRef list; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ values = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *list_o = _PyList_FromStackRefStealOnSuccess(values, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1098,13 +1439,17 @@ JUMP_TO_LABEL(error); } list = PyStackRef_FromPyObjectStealMortal(list_o); - stack_pointer[-oparg] = list; - stack_pointer += 1 - oparg; + _PyStackRef _tmp; + _tmp = list; + stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(BUILD_MAP) { + assert(STACK_LEVEL() - oparg*2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_MAP; (void)(opcode); @@ -1114,7 +1459,14 @@ INSTRUCTION_STATS(BUILD_MAP); _PyStackRef *values; _PyStackRef map; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ values = &stack_pointer[-oparg*2]; + /* Variables=[]; base=1 - oparg*2; sp=1; logical_sp=1 - oparg*2 */ STACKREFS_TO_PYOBJECTS(values, oparg*2, values_o); if (CONVERSION_FAILED(values_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1127,6 +1479,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1146,17 +1499,19 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ if (map_o == NULL) { JUMP_TO_LABEL(error); } map = PyStackRef_FromPyObjectStealMortal(map_o); - stack_pointer[0] = map; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = map; + _tos = _tmp; DISPATCH(); } TARGET(BUILD_SET) { + assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_SET; (void)(opcode); @@ -1166,7 +1521,14 @@ INSTRUCTION_STATS(BUILD_SET); _PyStackRef *values; _PyStackRef set; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ values = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *set_o = PySet_New(NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1181,6 +1543,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ JUMP_TO_LABEL(error); } int err = 0; @@ -1201,19 +1564,24 @@ if (err) { stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(set_o); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } set = PyStackRef_FromPyObjectStealMortal(set_o); - stack_pointer[-oparg] = set; - stack_pointer += 1 - oparg; + _PyStackRef _tmp; + _tmp = set; + stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(BUILD_SLICE) { + assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_SLICE; (void)(opcode); @@ -1223,7 +1591,14 @@ INSTRUCTION_STATS(BUILD_SLICE); _PyStackRef *args; _PyStackRef slice; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ PyObject *start_o = PyStackRef_AsPyObjectBorrow(args[0]); PyObject *stop_o = PyStackRef_AsPyObjectBorrow(args[1]); PyObject *step_o = oparg == 3 ? PyStackRef_AsPyObjectBorrow(args[2]) : NULL; @@ -1238,17 +1613,19 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ if (slice_o == NULL) { JUMP_TO_LABEL(error); } slice = PyStackRef_FromPyObjectStealMortal(slice_o); - stack_pointer[0] = slice; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = slice; + _tos = _tmp; DISPATCH(); } TARGET(BUILD_STRING) { + assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_STRING; (void)(opcode); @@ -1258,7 +1635,14 @@ INSTRUCTION_STATS(BUILD_STRING); _PyStackRef *pieces; _PyStackRef str; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ pieces = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ STACKREFS_TO_PYOBJECTS(pieces, oparg, pieces_o); if (CONVERSION_FAILED(pieces_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1271,6 +1655,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ JUMP_TO_LABEL(error); } PyObject *str_o = _PyUnicode_JoinArray(&_Py_STR(empty), pieces_o, oparg); @@ -1285,17 +1670,19 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ if (str_o == NULL) { JUMP_TO_LABEL(error); } str = PyStackRef_FromPyObjectSteal(str_o); - stack_pointer[0] = str; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = str; + _tos = _tmp; DISPATCH(); } TARGET(BUILD_TUPLE) { + assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_TUPLE; (void)(opcode); @@ -1305,19 +1692,30 @@ INSTRUCTION_STATS(BUILD_TUPLE); _PyStackRef *values; _PyStackRef tup; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ values = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ PyObject *tup_o = _PyTuple_FromStackRefStealOnSuccess(values, oparg); if (tup_o == NULL) { JUMP_TO_LABEL(error); } tup = PyStackRef_FromPyObjectStealMortal(tup_o); - stack_pointer[-oparg] = tup; - stack_pointer += 1 - oparg; + _PyStackRef _tmp; + _tmp = tup; + stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(CACHE) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CACHE; (void)(opcode); @@ -1327,10 +1725,14 @@ INSTRUCTION_STATS(CACHE); assert(0 && "Executing a cache."); Py_FatalError("Executing a cache."); + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(CALL) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL; (void)(opcode); @@ -1348,8 +1750,17 @@ _PyStackRef res; // _SPECIALIZE_CALL { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -1358,6 +1769,13 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_Call(callable[0], next_instr, oparg + !PyStackRef_IsNull(self_or_null[0])); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(CALL); @@ -1367,6 +1785,7 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { @@ -1383,6 +1802,7 @@ } // _DO_CALL { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -1405,6 +1825,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -1429,6 +1850,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1478,6 +1900,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -1485,12 +1908,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1498,16 +1925,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_ALLOC_AND_ENTER_INIT) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_ALLOC_AND_ENTER_INIT; (void)(opcode); @@ -1528,7 +1955,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1536,24 +1967,55 @@ } // _CHECK_AND_ALLOCATE_OBJECT { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ uint32_t type_version = read_u32(&this_instr[2].cache); (void)args; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyStackRef_IsNull(self_or_null[0])) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!PyType_Check(callable_o)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyTypeObject *tp = (PyTypeObject *)callable_o; if (FT_ATOMIC_LOAD_UINT32_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1565,6 +2027,13 @@ PyFunctionObject *init_func = (PyFunctionObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(cls->_spec_cache.init); PyCodeObject *code = (PyCodeObject *)init_func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize + _Py_InitCleanup.co_framesize)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1585,6 +2054,7 @@ } // _CREATE_INIT_FRAME { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-1 - oparg; sp=1; logical_sp=1 */ self = self_or_null; init = callable; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1593,13 +2063,15 @@ stack_pointer = _PyFrame_GetStackPointer(frame); assert(_PyFrame_GetBytecode(shim)[0].op.code == EXIT_INIT_CHECK); assert(_PyFrame_GetBytecode(shim)[1].op.code == RETURN_VALUE); - shim->localsplus[0] = PyStackRef_DUP(self[0]); + shim->localsplus[0] = PyStackRef_NULL; + shim->localsplus[1] = PyStackRef_DUP(self[0]); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, init[0], NULL, args-1, oparg+1, NULL, shim); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (temp == NULL) { _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FrameClearAndPop(tstate, shim); @@ -1612,6 +2084,7 @@ } // _PUSH_FRAME { + /* Variables=['init_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ new_frame = init_frame; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; @@ -1624,10 +2097,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(CALL_BOUND_METHOD_EXACT_ARGS) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BOUND_METHOD_EXACT_ARGS; (void)(opcode); @@ -1646,7 +2127,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1654,14 +2139,37 @@ } // _CHECK_CALL_BOUND_METHOD_EXACT_ARGS { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ if (!PyStackRef_IsNull(null[0])) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (Py_TYPE(PyStackRef_AsPyObjectBorrow(callable[0])) != &PyMethod_Type) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1669,6 +2177,7 @@ } // _INIT_CALL_BOUND_METHOD_EXACT_ARGS { + /* Variables=['callable'MLA, 'null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ self_or_null = null; assert(PyStackRef_IsNull(self_or_null[0])); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -1683,15 +2192,30 @@ // flush // _CHECK_FUNCTION_VERSION { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1699,11 +2223,19 @@ } // _CHECK_FUNCTION_EXACT_ARGS { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null[0]))) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1711,15 +2243,30 @@ } // _CHECK_STACK_SPACE { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (tstate->py_recursion_remaining <= 1) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1727,6 +2274,7 @@ } // _INIT_CALL_PY_EXACT_ARGS { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); @@ -1739,6 +2287,7 @@ } // _SAVE_RETURN_OFFSET { + /* Variables=['new_frame'L]; base=-1 - oparg; sp=1; logical_sp=-oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -1748,10 +2297,12 @@ } // _PUSH_FRAME { + /* Variables=['new_frame'L]; base=-1 - oparg; sp=1; logical_sp=-oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -1761,10 +2312,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(CALL_BOUND_METHOD_GENERAL) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BOUND_METHOD_GENERAL; (void)(opcode); @@ -1783,7 +2342,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1791,27 +2354,64 @@ } // _CHECK_METHOD_VERSION { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (((PyFunctionObject *)func)->func_version != func_version) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!PyStackRef_IsNull(null[0])) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1819,6 +2419,7 @@ } // _EXPAND_METHOD { + /* Variables=['callable'MLA, 'null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ self_or_null = null; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyStackRef_IsNull(self_or_null[0])); @@ -1834,6 +2435,7 @@ // flush // _PY_FRAME_GENERAL { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -1852,6 +2454,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -1859,6 +2462,7 @@ } // _SAVE_RETURN_OFFSET { + /* Variables=['new_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -1868,6 +2472,7 @@ } // _PUSH_FRAME { + /* Variables=['new_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1879,10 +2484,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(CALL_BUILTIN_CLASS) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BUILTIN_CLASS; (void)(opcode); @@ -1901,11 +2514,28 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_CLASS { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyType_Check(callable_o)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1918,6 +2548,13 @@ total_args++; } if (tp->tp_vectorcall == NULL) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1941,6 +2578,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1963,6 +2601,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -1970,12 +2609,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1983,16 +2626,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_BUILTIN_FAST) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BUILTIN_FAST; (void)(opcode); @@ -2011,9 +2654,19 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_FAST { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -2022,11 +2675,25 @@ total_args++; } if (!PyCFunction_CheckExact(callable_o)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (PyCFunction_GET_FLAGS(callable_o) != METH_FASTCALL) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2051,6 +2718,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2077,6 +2745,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -2084,12 +2753,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2097,16 +2770,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_BUILTIN_FAST_WITH_KEYWORDS) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BUILTIN_FAST_WITH_KEYWORDS; (void)(opcode); @@ -2125,9 +2798,19 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_FAST_WITH_KEYWORDS { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -2136,11 +2819,25 @@ total_args++; } if (!PyCFunction_CheckExact(callable_o)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (PyCFunction_GET_FLAGS(callable_o) != (METH_FASTCALL | METH_KEYWORDS)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2169,6 +2866,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2192,6 +2890,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -2199,12 +2898,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2212,16 +2915,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_BUILTIN_O) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BUILTIN_O; (void)(opcode); @@ -2240,9 +2943,19 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_O { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -2250,21 +2963,49 @@ total_args++; } if (total_args != 1) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!PyCFunction_CheckExact(callable_o)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (PyCFunction_GET_FLAGS(callable_o) != METH_O) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (_Py_ReachedRecursionLimit(tstate)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2282,6 +3023,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2292,12 +3034,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2305,16 +3051,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_FUNCTION_EX) { + assert(STACK_LEVEL() - 4 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_FUNCTION_EX; (void)(opcode); @@ -2337,15 +3083,24 @@ _PyStackRef result; // _MAKE_CALLARGS_A_TUPLE { - kwargs_in = stack_pointer[-1]; - callargs = stack_pointer[-2]; - func = stack_pointer[-4]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + kwargs_in = _tos; + callargs = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + func = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs); if (PyTuple_CheckExact(callargs_o)) { tuple = callargs; kwargs_out = kwargs_in; } else { + /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[0] = kwargs_in; + /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'ML]; base=-3; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'ML]; base=-3; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2361,19 +3116,20 @@ kwargs_out = kwargs_in; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func'ML, 'unused'M]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs); stack_pointer = _PyFrame_GetStackPointer(frame); tuple = PyStackRef_FromPyObjectSteal(tuple_o); - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); + stack_pointer += 1; } } // _DO_CALL_FUNCTION_EX { + /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-3; sp=0; logical_sp=1 */ kwargs_st = kwargs_out; callargs_st = tuple; - null = stack_pointer[-3]; + null = stack_pointer[-2]; func_st = func; (void)null; PyObject *func = PyStackRef_AsPyObjectBorrow(func_st); @@ -2387,8 +3143,15 @@ assert(PyTuple_CheckExact(callargs)); PyObject *arg = PyTuple_GET_SIZE(callargs) > 0 ? PyTuple_GET_ITEM(callargs, 0) : &_PyInstrumentation_MISSING; - stack_pointer[-2] = callargs_st; - stack_pointer[-1] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[-1] = callargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[0] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -2433,8 +3196,9 @@ Py_ssize_t nargs = PyTuple_GET_SIZE(callargs); int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func)); - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex( tstate, func_st, locals, @@ -2442,6 +3206,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -2453,24 +3218,34 @@ assert(PyTuple_CheckExact(callargs)); PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st); assert(kwargs == NULL || PyDict_CheckExact(kwargs)); - stack_pointer[-2] = callargs_st; - stack_pointer[-1] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[-1] = callargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[0] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); result_o = PyObject_Call(func, callargs, kwargs); stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML]; base=-3; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(kwargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(func_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2481,12 +3256,16 @@ } // _CHECK_PERIODIC { + /* Variables=['result'L]; base=-3; sp=-3; logical_sp=-2 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['result'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = result; + /* Variables=['result'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['result'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2494,16 +3273,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = result; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = result; + _tos = _tmp; DISPATCH(); } TARGET(CALL_INTRINSIC_1) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_INTRINSIC_1; (void)(opcode); @@ -2513,13 +3292,20 @@ INSTRUCTION_STATS(CALL_INTRINSIC_1); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + value = _tos; assert(oparg <= MAX_INTRINSIC_1); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_UnaryFunctions[oparg].func(tstate, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2527,13 +3313,14 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_INTRINSIC_2) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_INTRINSIC_2; (void)(opcode); @@ -2544,35 +3331,48 @@ _PyStackRef value2_st; _PyStackRef value1_st; _PyStackRef res; - value1_st = stack_pointer[-1]; - value2_st = stack_pointer[-2]; + value1_st = _tos; + value2_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg <= MAX_INTRINSIC_2); PyObject *value1 = PyStackRef_AsPyObjectBorrow(value1_st); PyObject *value2 = PyStackRef_AsPyObjectBorrow(value2_st); + /* Variables=['value2_st'ML, 'value1_st'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = value1_st; + /* Variables=['value2_st'ML, 'value1_st'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value2_st'ML, 'value1_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_BinaryFunctions[oparg].func(tstate, value2, value1); _PyStackRef tmp = value1_st; value1_st = PyStackRef_NULL; + /* Variables=['value2_st'ML, 'value1_st'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = value1_st; + /* Variables=['value2_st'ML, 'value1_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = value2_st; value2_st = PyStackRef_NULL; + /* Variables=['value2_st'L, 'value1_st'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = value2_st; + /* Variables=['value2_st'ML, 'value1_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_ISINSTANCE) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_ISINSTANCE; (void)(opcode); @@ -2589,9 +3389,18 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; @@ -2600,12 +3409,26 @@ total_args++; } if (total_args != 2) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.isinstance) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2624,7 +3447,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = callable; callable = res; + /* Variables=['callable'L, 'self_or_null'MLA, 'args'MLA]; base=-1 - oparg; sp=1; logical_sp=1 */ stack_pointer[-2 - oparg] = callable; + /* Variables=['callable'ML, 'self_or_null'MLA, 'args'MLA]; base=-1 - oparg; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -2637,10 +3462,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + _PyStackRef _tmp; + _tmp = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(CALL_KW) { + assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_KW; (void)(opcode); @@ -2661,16 +3494,31 @@ _PyStackRef res; // _SPECIALIZE_CALL_KW { - self_or_null = &stack_pointer[-2 - oparg]; - callable = &stack_pointer[-3 - oparg]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ + callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, '_tos'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, '_tos'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_CallKw(callable[0], next_instr, oparg + !PyStackRef_IsNull(self_or_null[0])); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(CALL_KW); @@ -2680,8 +3528,9 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD_KW { - kwnames_in = stack_pointer[-1]; - args = &stack_pointer[-1 - oparg]; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + kwnames_in = _tos; + args = &stack_pointer[-oparg]; (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -2690,16 +3539,24 @@ PyObject *method = ((PyMethodObject *)callable_o)->im_func; _PyStackRef temp = callable[0]; callable[0] = PyStackRef_FromPyObjectNew(method); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_in'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = kwnames_in; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_in'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_in'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; } kwnames_out = kwnames_in; } // _DO_CALL_KW { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_out'L]; base=-2 - oparg; sp=0; logical_sp=1 */ kwnames = kwnames_out; - args = &stack_pointer[-1 - oparg]; + args = &stack_pointer[-oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); int total_args = oparg; @@ -2715,7 +3572,12 @@ { int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); - stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( tstate, callable[0], locals, @@ -2724,6 +3586,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2736,11 +3599,12 @@ } STACKREFS_TO_PYOBJECTS(arguments, total_args, args_o); if (CONVERSION_FAILED(args_o)) { - stack_pointer[-1] = kwnames; _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -2754,11 +3618,17 @@ callable[0] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -3 - oparg; + stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } - stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall( callable_o, args_o, @@ -2792,7 +3662,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=1; logical_sp=1 */ stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -2808,18 +3680,20 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_KW_BOUND_METHOD) { + assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_KW_BOUND_METHOD; (void)(opcode); @@ -2839,7 +3713,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -2847,27 +3725,42 @@ } // _CHECK_METHOD_VERSION_KW { - null = &stack_pointer[-2 - oparg]; - callable = &stack_pointer[-3 - oparg]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ + callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } if (((PyFunctionObject *)func)->func_version != func_version) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } if (!PyStackRef_IsNull(null[0])) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -2875,6 +3768,7 @@ } // _EXPAND_METHOD_KW { + /* Variables=['callable'MLA, 'null'MLA, 'unused'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ self_or_null = null; assert(PyStackRef_IsNull(self_or_null[0])); _PyStackRef callable_s = callable[0]; @@ -2883,6 +3777,12 @@ self_or_null[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self); callable[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func); assert(PyStackRef_FunctionCheck(callable[0])); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, '_tos'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, '_tos'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable_s); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2890,7 +3790,8 @@ // flush // _PY_FRAME_KW { - kwnames = stack_pointer[-1]; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, '_tos'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ + kwnames = _tos; args = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -2912,11 +3813,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -2924,6 +3827,7 @@ } // _SAVE_RETURN_OFFSET { + /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -2933,6 +3837,7 @@ } // _PUSH_FRAME { + /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2944,10 +3849,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - DISPATCH(); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-3 - oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ + _tos = _tmp; + DISPATCH(); } TARGET(CALL_KW_NON_PY) { + assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_KW_NON_PY; (void)(opcode); @@ -2968,14 +3881,22 @@ /* Skip 2 cache entries */ // _CHECK_IS_NOT_PY_CALLABLE_KW { - callable = &stack_pointer[-3 - oparg]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } if (Py_TYPE(callable_o) == &PyMethod_Type) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -2983,9 +3904,10 @@ } // _CALL_KW_NON_PY { - kwnames = stack_pointer[-1]; - args = &stack_pointer[-1 - oparg]; - self_or_null = &stack_pointer[-2 - oparg]; + /* Variables=['callable'MLA, 'unused'MA, 'unused'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + kwnames = _tos; + args = &stack_pointer[-oparg]; + self_or_null = &stack_pointer[-1 - oparg]; #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif @@ -3001,7 +3923,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -3015,12 +3939,19 @@ callable[0] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -3 - oparg; + stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames_o); + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall( callable_o, args_o, @@ -3029,6 +3960,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3050,6 +3982,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -3057,12 +3990,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3070,16 +4007,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_KW_PY) { + assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_KW_PY; (void)(opcode); @@ -3098,7 +4035,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -3106,16 +4047,24 @@ } // _CHECK_FUNCTION_VERSION_KW { - callable = &stack_pointer[-3 - oparg]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -3123,9 +4072,10 @@ } // _PY_FRAME_KW { - kwnames = stack_pointer[-1]; - args = &stack_pointer[-1 - oparg]; - self_or_null = &stack_pointer[-2 - oparg]; + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + kwnames = _tos; + args = &stack_pointer[-oparg]; + self_or_null = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -3138,6 +4088,12 @@ assert(Py_TYPE(callable_o) == &PyFunction_Type); int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, callable[0], locals, @@ -3146,11 +4102,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -3158,6 +4116,7 @@ } // _SAVE_RETURN_OFFSET { + /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -3167,6 +4126,7 @@ } // _PUSH_FRAME { + /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3178,10 +4138,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-3 - oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(CALL_LEN) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_LEN; (void)(opcode); @@ -3198,9 +4166,18 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -3208,12 +4185,26 @@ total_args++; } if (total_args != 1) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.len) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3237,17 +4228,19 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_LIST_APPEND) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_LIST_APPEND; (void)(opcode); @@ -3263,25 +4256,36 @@ _PyStackRef arg; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - arg = stack_pointer[-1]; - self = stack_pointer[-2]; - callable = stack_pointer[-3]; + arg = _tos; + self = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + callable = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ assert(oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *self_o = PyStackRef_AsPyObjectBorrow(self); PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.list_append) { + _PyStackRef _tmp; + _tmp = arg; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } assert(self_o != NULL); if (!PyList_Check(self_o)) { + _PyStackRef _tmp; + _tmp = arg; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!LOCK_OBJECT(self_o)) { + _PyStackRef _tmp; + _tmp = arg; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3289,13 +4293,15 @@ STAT_INC(CALL, hit); int err = _PyList_AppendTakeRef((PyListObject *)self_o, PyStackRef_AsPyObjectSteal(arg)); UNLOCK_OBJECT(self_o); - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3307,10 +4313,18 @@ assert(next_instr->op.code == POP_TOP); SKIP_OVER(1); #endif + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-3; sp=-2; logical_sp=-3 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ + _tos = _tmp; DISPATCH(); } TARGET(CALL_METHOD_DESCRIPTOR_FAST) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_METHOD_DESCRIPTOR_FAST; (void)(opcode); @@ -3329,9 +4343,19 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_FAST { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -3341,18 +4365,39 @@ } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_FASTCALL) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]); if (!Py_IS_TYPE(self, method->d_common.d_type)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3377,6 +4422,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3402,6 +4448,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -3409,12 +4456,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3422,16 +4473,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS; (void)(opcode); @@ -3450,9 +4501,19 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -3462,12 +4523,26 @@ } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != (METH_FASTCALL|METH_KEYWORDS)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3475,6 +4550,13 @@ PyTypeObject *d_type = method->d_common.d_type; PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]); if (!Py_IS_TYPE(self, d_type)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3499,6 +4581,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3524,6 +4607,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -3531,12 +4615,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3544,16 +4632,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_METHOD_DESCRIPTOR_NOARGS) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_METHOD_DESCRIPTOR_NOARGS; (void)(opcode); @@ -3572,9 +4660,19 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_NOARGS { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ assert(oparg == 0 || oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -3583,12 +4681,26 @@ total_args++; } if (total_args != 1) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3597,16 +4709,37 @@ _PyStackRef self_stackref = args[0]; PyObject *self = PyStackRef_AsPyObjectBorrow(self_stackref); if (!Py_IS_TYPE(self, method->d_common.d_type)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (meth->ml_flags != METH_NOARGS) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (_Py_ReachedRecursionLimit(tstate)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3623,6 +4756,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3633,12 +4767,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3646,16 +4784,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_METHOD_DESCRIPTOR_O) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_METHOD_DESCRIPTOR_O; (void)(opcode); @@ -3674,9 +4812,19 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_O { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -3686,22 +4834,50 @@ } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (total_args != 2) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_O) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (_Py_ReachedRecursionLimit(tstate)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3710,6 +4886,13 @@ _PyStackRef self_stackref = arguments[0]; if (!Py_IS_TYPE(PyStackRef_AsPyObjectBorrow(self_stackref), method->d_common.d_type)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3739,6 +4922,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -3746,12 +4930,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3759,16 +4947,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_NON_PY_GENERAL) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_NON_PY_GENERAL; (void)(opcode); @@ -3788,14 +4976,36 @@ /* Skip 2 cache entries */ // _CHECK_IS_NOT_PY_CALLABLE { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (Py_TYPE(callable_o) == &PyMethod_Type) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3803,6 +5013,7 @@ } // _CALL_NON_PY_GENERAL { + /* Variables=['callable'MLA, 'unused'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; self_or_null = &stack_pointer[-1 - oparg]; #if TIER_ONE @@ -3833,6 +5044,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3859,6 +5071,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -3866,12 +5079,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3879,16 +5096,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_PY_EXACT_ARGS) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_PY_EXACT_ARGS; (void)(opcode); @@ -3906,7 +5123,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3914,16 +5135,38 @@ } // _CHECK_FUNCTION_VERSION { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3931,12 +5174,20 @@ } // _CHECK_FUNCTION_EXACT_ARGS { + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ self_or_null = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null[0]))) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3944,15 +5195,30 @@ } // _CHECK_STACK_SPACE { + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (tstate->py_recursion_remaining <= 1) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3960,6 +5226,7 @@ } // _INIT_CALL_PY_EXACT_ARGS { + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; self_or_null = &stack_pointer[-1 - oparg]; int has_self = !PyStackRef_IsNull(self_or_null[0]); @@ -3973,6 +5240,7 @@ } // _SAVE_RETURN_OFFSET { + /* Variables=['new_frame'L]; base=-1 - oparg; sp=1; logical_sp=-oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -3982,10 +5250,12 @@ } // _PUSH_FRAME { + /* Variables=['new_frame'L]; base=-1 - oparg; sp=1; logical_sp=-oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -3995,10 +5265,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(CALL_PY_GENERAL) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_PY_GENERAL; (void)(opcode); @@ -4016,7 +5294,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4024,16 +5306,38 @@ } // _CHECK_FUNCTION_VERSION { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4041,6 +5345,7 @@ } // _PY_FRAME_GENERAL { + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; self_or_null = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -4060,6 +5365,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -4067,6 +5373,7 @@ } // _SAVE_RETURN_OFFSET { + /* Variables=['new_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -4076,6 +5383,7 @@ } // _PUSH_FRAME { + /* Variables=['new_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4087,10 +5395,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + _tos = _tmp; DISPATCH(); } TARGET(CALL_STR_1) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_STR_1; (void)(opcode); @@ -4109,28 +5425,44 @@ /* Skip 2 cache entries */ // _CALL_STR_1 { - arg = stack_pointer[-1]; - null = stack_pointer[-2]; - callable = stack_pointer[-3]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + arg = _tos; + null = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + callable = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); if (!PyStackRef_IsNull(null)) { + _PyStackRef _tmp; + _tmp = arg; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (callable_o != (PyObject *)&PyUnicode_Type) { + _PyStackRef _tmp; + _tmp = arg; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } STAT_INC(CALL, hit); + /* Variables=['callable'ML, 'null'ML, 'arg'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = arg; + /* Variables=['callable'ML, 'null'ML, 'arg'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'ML, 'null'ML, 'arg'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Str(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4141,12 +5473,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4154,16 +5490,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_TUPLE_1) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_TUPLE_1; (void)(opcode); @@ -4182,28 +5518,44 @@ /* Skip 2 cache entries */ // _CALL_TUPLE_1 { - arg = stack_pointer[-1]; - null = stack_pointer[-2]; - callable = stack_pointer[-3]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + arg = _tos; + null = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + callable = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); if (!PyStackRef_IsNull(null)) { + _PyStackRef _tmp; + _tmp = arg; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (callable_o != (PyObject *)&PyTuple_Type) { + _PyStackRef _tmp; + _tmp = arg; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } STAT_INC(CALL, hit); + /* Variables=['callable'ML, 'null'ML, 'arg'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = arg; + /* Variables=['callable'ML, 'null'ML, 'arg'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'ML, 'null'ML, 'arg'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PySequence_Tuple(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4214,12 +5566,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4227,16 +5583,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(CALL_TYPE_1) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_TYPE_1; (void)(opcode); @@ -4253,34 +5609,52 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - arg = stack_pointer[-1]; - null = stack_pointer[-2]; - callable = stack_pointer[-3]; + arg = _tos; + null = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + callable = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); if (!PyStackRef_IsNull(null)) { + _PyStackRef _tmp; + _tmp = arg; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (callable_o != (PyObject *)&PyType_Type) { + _PyStackRef _tmp; + _tmp = arg; + _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } STAT_INC(CALL, hit); res = PyStackRef_FromPyObjectNew(Py_TYPE(arg_o)); - stack_pointer[-3] = res; - stack_pointer += -2; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(CHECK_EG_MATCH) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CHECK_EG_MATCH; (void)(opcode); @@ -4292,10 +5666,17 @@ _PyStackRef match_type_st; _PyStackRef rest; _PyStackRef match; - match_type_st = stack_pointer[-1]; - exc_value_st = stack_pointer[-2]; + match_type_st = _tos; + exc_value_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); PyObject *match_type = PyStackRef_AsPyObjectBorrow(match_type_st); + /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = match_type_st; + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyEval_CheckExceptStarTypeValid(tstate, match_type); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4303,15 +5684,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; + /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = match_type_st; + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; + /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = exc_value_st; + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ JUMP_TO_LABEL(error); } PyObject *match_o = NULL; @@ -4321,15 +5707,20 @@ &match_o, &rest_o); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; + /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = match_type_st; + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; + /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = exc_value_st; + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (res < 0) { JUMP_TO_LABEL(error); } @@ -4344,14 +5735,20 @@ } rest = PyStackRef_FromPyObjectSteal(rest_o); match = PyStackRef_FromPyObjectSteal(match_o); + _PyStackRef _tmp; + _tmp = match; + /* Variables=['rest'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = rest; - stack_pointer[1] = match; - stack_pointer += 2; + /* Variables=['rest'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['rest'ML]; base=-1; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(CHECK_EXC_MATCH) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CHECK_EXC_MATCH; (void)(opcode); @@ -4362,11 +5759,18 @@ _PyStackRef left; _PyStackRef right; _PyStackRef b; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _tos; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyExceptionInstance_Check(left_o)); + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyEval_CheckExceptTypeValid(tstate, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4378,17 +5782,19 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(right); stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = b; + _tos = _tmp; DISPATCH(); } TARGET(CLEANUP_THROW) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CLEANUP_THROW; (void)(opcode); @@ -4403,14 +5809,22 @@ _PyStackRef exc_value_st; _PyStackRef none; _PyStackRef value; - exc_value_st = stack_pointer[-1]; - last_sent_val = stack_pointer[-2]; - sub_iter = stack_pointer[-3]; + exc_value_st = _tos; + last_sent_val = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + sub_iter = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); #if !Py_TAIL_CALL_INTERP assert(throwflag); #endif assert(exc_value && PyExceptionInstance_Check(exc_value)); + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = exc_value_st; + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopIteration); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4419,19 +5833,26 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = sub_iter; sub_iter = value; + /* Variables=['sub_iter'L, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-3] = sub_iter; + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'L]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-1] = exc_value_st; + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = last_sent_val; last_sent_val = PyStackRef_NULL; + /* Variables=['sub_iter'ML, 'last_sent_val'L, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-2] = last_sent_val; + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ none = PyStackRef_None; } else { @@ -4440,14 +5861,20 @@ monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } + _PyStackRef _tmp; + _tmp = value; + /* Variables=['none'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = none; - stack_pointer[1] = value; - stack_pointer += 2; + /* Variables=['none'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['none'ML]; base=-2; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(COMPARE_OP) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COMPARE_OP; (void)(opcode); @@ -4463,16 +5890,30 @@ _PyStackRef res; // _SPECIALIZE_COMPARE_OP { - right = stack_pointer[-1]; - left = stack_pointer[-2]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + right = _tos; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_CompareOp(left, right, next_instr, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = right; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML]; base=-1; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(COMPARE_OP); @@ -4481,22 +5922,34 @@ } // _COMPARE_OP { + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert((oparg >> 5) <= Py_GE); + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_RichCompare(left_o, right_o, oparg >> 5); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -4514,13 +5967,14 @@ res = PyStackRef_FromPyObjectSteal(res_o); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(COMPARE_OP_FLOAT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COMPARE_OP_FLOAT; (void)(opcode); @@ -4537,9 +5991,13 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -4547,11 +6005,16 @@ } // _GUARD_NOS_FLOAT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ right = value; - left = stack_pointer[-2]; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -4560,6 +6023,7 @@ /* Skip 1 cache entry */ // _COMPARE_OP_FLOAT { + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); STAT_INC(COMPARE_OP, hit); @@ -4570,13 +6034,17 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; } - stack_pointer[-2] = res; + _PyStackRef _tmp; + _tmp = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(COMPARE_OP_INT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COMPARE_OP_INT; (void)(opcode); @@ -4593,9 +6061,13 @@ _PyStackRef res; // _GUARD_TOS_INT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -4603,11 +6075,16 @@ } // _GUARD_NOS_INT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ right = value; - left = stack_pointer[-2]; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -4616,14 +6093,21 @@ /* Skip 1 cache entry */ // _COMPARE_OP_INT { + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); } if (!_PyLong_IsCompact((PyLongObject *)right_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -4638,13 +6122,17 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; } - stack_pointer[-2] = res; + _PyStackRef _tmp; + _tmp = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(COMPARE_OP_STR) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COMPARE_OP_STR; (void)(opcode); @@ -4663,9 +6151,13 @@ _PyStackRef res; // _GUARD_TOS_UNICODE { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -4673,11 +6165,16 @@ } // _GUARD_NOS_UNICODE { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ tos = value; - nos = stack_pointer[-2]; + nos = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { + _PyStackRef _tmp; + _tmp = tos; + _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -4686,6 +6183,7 @@ /* Skip 1 cache entry */ // _COMPARE_OP_STR { + /* Variables=['nos'ML, 'tos'L]; base=-1; sp=0; logical_sp=1 */ right = tos; left = nos; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -4700,13 +6198,17 @@ assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; } - stack_pointer[-2] = res; + _PyStackRef _tmp; + _tmp = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(CONTAINS_OP) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CONTAINS_OP; (void)(opcode); @@ -4722,15 +6224,28 @@ _PyStackRef b; // _SPECIALIZE_CONTAINS_OP { - right = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + right = _tos; uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['left'M, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'M, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'M, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_ContainsOp(right, next_instr); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = right; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'M]; base=-1; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(CONTAINS_OP); @@ -4739,34 +6254,47 @@ } // _CONTAINS_OP { - left = stack_pointer[-2]; + /* Variables=['left'M, 'right'L]; base=-1; sp=0; logical_sp=1 */ + left = stack_pointer[-1]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = PySequence_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (res < 0) { JUMP_TO_LABEL(error); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; } - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = b; + _tos = _tmp; DISPATCH(); } TARGET(CONTAINS_OP_DICT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CONTAINS_OP_DICT; (void)(opcode); @@ -4781,40 +6309,56 @@ _PyStackRef right; _PyStackRef b; /* Skip 1 cache entry */ - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _tos; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!PyDict_CheckExact(right_o)) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(CONTAINS_OP); assert(_PyOpcode_Deopt[opcode] == (CONTAINS_OP)); JUMP_TO_PREDICTED(CONTAINS_OP); } STAT_INC(CONTAINS_OP, hit); + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = PyDict_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (res < 0) { JUMP_TO_LABEL(error); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = b; + _tos = _tmp; DISPATCH(); } TARGET(CONTAINS_OP_SET) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CONTAINS_OP_SET; (void)(opcode); @@ -4829,40 +6373,56 @@ _PyStackRef right; _PyStackRef b; /* Skip 1 cache entry */ - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _tos; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!(PySet_CheckExact(right_o) || PyFrozenSet_CheckExact(right_o))) { + _PyStackRef _tmp; + _tmp = right; + _tos = _tmp; UPDATE_MISS_STATS(CONTAINS_OP); assert(_PyOpcode_Deopt[opcode] == (CONTAINS_OP)); JUMP_TO_PREDICTED(CONTAINS_OP); } STAT_INC(CONTAINS_OP, hit); + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PySet_Contains((PySetObject *)right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; + /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; + /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (res < 0) { JUMP_TO_LABEL(error); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = b; + _tos = _tmp; DISPATCH(); } TARGET(CONVERT_VALUE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CONVERT_VALUE; (void)(opcode); @@ -4872,15 +6432,22 @@ INSTRUCTION_STATS(CONVERT_VALUE); _PyStackRef value; _PyStackRef result; - value = stack_pointer[-1]; + value = _tos; conversion_func conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = _PyEval_ConversionFuncs[oparg]; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *result_o = conv_fn(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4888,13 +6455,14 @@ JUMP_TO_LABEL(error); } result = PyStackRef_FromPyObjectSteal(result_o); - stack_pointer[0] = result; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = result; + _tos = _tmp; DISPATCH(); } TARGET(COPY) { + assert(STACK_LEVEL() - 1 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = COPY; (void)(opcode); @@ -4904,16 +6472,24 @@ INSTRUCTION_STATS(COPY); _PyStackRef bottom; _PyStackRef top; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ bottom = stack_pointer[-1 - (oparg-1)]; + /* Variables=[]; base=-(oparg-1); sp=1; logical_sp=-(oparg-1) */ assert(oparg > 0); top = PyStackRef_DUP(bottom); - stack_pointer[0] = top; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = top; + _tos = _tmp; DISPATCH(); } TARGET(COPY_FREE_VARS) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COPY_FREE_VARS; (void)(opcode); @@ -4931,10 +6507,14 @@ PyObject *o = PyTuple_GET_ITEM(closure, i); frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); } + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(DELETE_ATTR) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_ATTR; (void)(opcode); @@ -4943,23 +6523,38 @@ next_instr += 1; INSTRUCTION_STATS(DELETE_ATTR); _PyStackRef owner; - owner = stack_pointer[-1]; + owner = _tos; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(DELETE_DEREF) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_DEREF; (void)(opcode); @@ -4970,18 +6565,37 @@ PyObject *cell = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *oldobj = PyCell_SwapTakeRef((PyCellObject *)cell, NULL); if (oldobj == NULL) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(oldobj); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(DELETE_FAST) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_FAST; (void)(opcode); @@ -4991,6 +6605,12 @@ INSTRUCTION_STATS(DELETE_FAST); _PyStackRef v = GETLOCAL(oparg); if (PyStackRef_IsNull(v)) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcCheckArg(tstate, PyExc_UnboundLocalError, UNBOUNDLOCAL_ERROR_MSG, @@ -5001,13 +6621,26 @@ } _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_NULL; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(DELETE_GLOBAL) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_GLOBAL; (void)(opcode); @@ -5016,6 +6649,12 @@ next_instr += 1; INSTRUCTION_STATS(DELETE_GLOBAL); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_Pop(GLOBALS(), name, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5029,10 +6668,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(DELETE_NAME) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_NAME; (void)(opcode); @@ -5044,12 +6690,24 @@ PyObject *ns = LOCALS(); int err; if (ns == NULL) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_SystemError, "no locals when deleting %R", name); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_DelItem(ns, name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5061,10 +6719,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(DELETE_SUBSCR) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_SUBSCR; (void)(opcode); @@ -5074,29 +6739,49 @@ INSTRUCTION_STATS(DELETE_SUBSCR); _PyStackRef container; _PyStackRef sub; - sub = stack_pointer[-1]; - container = stack_pointer[-2]; + sub = _tos; + container = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + /* Variables=['container'ML, 'sub'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = sub; + /* Variables=['container'ML, 'sub'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['container'ML, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; + /* Variables=['container'ML, 'sub'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = sub; + /* Variables=['container'ML, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; + /* Variables=['container'L, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = container; + /* Variables=['container'ML, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (err) { JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(DICT_MERGE) { + assert(STACK_LEVEL() - 5 + (oparg - 1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = DICT_MERGE; (void)(opcode); @@ -5107,12 +6792,20 @@ _PyStackRef callable; _PyStackRef dict; _PyStackRef update; - update = stack_pointer[-1]; - dict = stack_pointer[-2 - (oparg - 1)]; - callable = stack_pointer[-5 - (oparg - 1)]; + update = _tos; + dict = stack_pointer[-1 - (oparg - 1)]; + /* Variables=[]; base=-1 - (oparg - 1); sp=0; logical_sp=-1 - (oparg - 1) */ + callable = stack_pointer[-4 - (oparg - 1)]; + /* Variables=[]; base=-4 - (oparg - 1); sp=0; logical_sp=-4 - (oparg - 1) */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); + /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA, 'update'L]; base=-4 - (oparg - 1); sp=0; logical_sp=1 */ + stack_pointer[0] = update; + /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA, 'update'ML]; base=-4 - (oparg - 1); sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA, 'update'ML]; base=-4 - (oparg - 1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_MergeEx(dict_o, update_o, 2); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5122,6 +6815,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-4 - (oparg - 1); sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5129,13 +6823,22 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-4 - (oparg - 1); sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(DICT_UPDATE) { + assert(STACK_LEVEL() - 2 + (oparg - 1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = DICT_UPDATE; (void)(opcode); @@ -5145,10 +6848,17 @@ INSTRUCTION_STATS(DICT_UPDATE); _PyStackRef dict; _PyStackRef update; - update = stack_pointer[-1]; - dict = stack_pointer[-2 - (oparg - 1)]; + update = _tos; + dict = stack_pointer[-1 - (oparg - 1)]; + /* Variables=[]; base=-1 - (oparg - 1); sp=0; logical_sp=-1 - (oparg - 1) */ PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); + /* Variables=['dict'ML, 'unused'MA, 'update'L]; base=-1 - (oparg - 1); sp=0; logical_sp=1 */ + stack_pointer[0] = update; + /* Variables=['dict'ML, 'unused'MA, 'update'ML]; base=-1 - (oparg - 1); sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict'ML, 'unused'MA, 'update'ML]; base=-1 - (oparg - 1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_Update(dict_o, update_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5165,6 +6875,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict'ML, 'unused'MA]; base=-1 - (oparg - 1); sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5172,13 +6883,22 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict'ML, 'unused'MA]; base=-1 - (oparg - 1); sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(END_ASYNC_FOR) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = END_ASYNC_FOR; (void)(opcode); @@ -5190,12 +6910,19 @@ INSTRUCTION_STATS(END_ASYNC_FOR); _PyStackRef awaitable_st; _PyStackRef exc_st; - exc_st = stack_pointer[-1]; - awaitable_st = stack_pointer[-2]; + exc_st = _tos; + awaitable_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ JUMPBY(0); (void)oparg; PyObject *exc = PyStackRef_AsPyObjectBorrow(exc_st); assert(exc && PyExceptionInstance_Check(exc)); + /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = exc_st; + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5203,15 +6930,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = exc_st; exc_st = PyStackRef_NULL; + /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = exc_st; + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = awaitable_st; awaitable_st = PyStackRef_NULL; + /* Variables=['awaitable_st'L, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = awaitable_st; + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ } else { Py_INCREF(exc); @@ -5220,10 +6952,18 @@ monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(END_FOR) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = END_FOR; (void)(opcode); @@ -5231,16 +6971,22 @@ next_instr += 1; INSTRUCTION_STATS(END_FOR); _PyStackRef value; - value = stack_pointer[-1]; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + value = _tos; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(END_SEND) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = END_SEND; (void)(opcode); @@ -5251,20 +6997,28 @@ _PyStackRef receiver; _PyStackRef value; _PyStackRef val; - value = stack_pointer[-1]; - receiver = stack_pointer[-2]; + value = _tos; + receiver = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ (void)receiver; val = value; - stack_pointer[-2] = val; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = val; + /* Variables=['val'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(receiver); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = val; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(ENTER_EXECUTOR) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = ENTER_EXECUTOR; (void)(opcode); @@ -5288,7 +7042,9 @@ next_instr = this_instr; if (_PyOpcode_Caches[_PyOpcode_Deopt[opcode]]) { PAUSE_ADAPTIVE_COUNTER(this_instr[1].counter); - } + }_PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH_GOTO(); } tstate->previous_executor = Py_None; @@ -5297,10 +7053,14 @@ #else Py_FatalError("ENTER_EXECUTOR is not supported in this build"); #endif /* _Py_TIER2 */ + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(EXIT_INIT_CHECK) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = EXIT_INIT_CHECK; (void)(opcode); @@ -5309,9 +7069,14 @@ next_instr += 1; INSTRUCTION_STATS(EXIT_INIT_CHECK); _PyStackRef should_be_none; - should_be_none = stack_pointer[-1]; - assert(STACK_LEVEL() == 2); + should_be_none = _tos; if (!PyStackRef_IsNone(should_be_none)) { + /* Variables=['should_be_none'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = should_be_none; + /* Variables=['should_be_none'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['should_be_none'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyErr_Format(PyExc_TypeError, "__init__() should return None, not '%.200s'", @@ -5319,12 +7084,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(EXTENDED_ARG) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = EXTENDED_ARG; (void)(opcode); @@ -5336,11 +7107,14 @@ assert(oparg); opcode = next_instr->op.code; oparg = oparg << 8 | next_instr->op.arg; - PRE_DISPATCH_GOTO(); + PRE_DISPATCH_GOTO();_PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH_GOTO(); } TARGET(FORMAT_SIMPLE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FORMAT_SIMPLE; (void)(opcode); @@ -5350,14 +7124,21 @@ INSTRUCTION_STATS(FORMAT_SIMPLE); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(value_o, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5368,16 +7149,15 @@ } else { res = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(FORMAT_WITH_SPEC) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FORMAT_WITH_SPEC; (void)(opcode); @@ -5388,32 +7168,45 @@ _PyStackRef value; _PyStackRef fmt_spec; _PyStackRef res; - fmt_spec = stack_pointer[-1]; - value = stack_pointer[-2]; + fmt_spec = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + /* Variables=['value'ML, 'fmt_spec'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = fmt_spec; + /* Variables=['value'ML, 'fmt_spec'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML, 'fmt_spec'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(PyStackRef_AsPyObjectBorrow(value), PyStackRef_AsPyObjectBorrow(fmt_spec)); _PyStackRef tmp = fmt_spec; fmt_spec = PyStackRef_NULL; + /* Variables=['value'ML, 'fmt_spec'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = fmt_spec; + /* Variables=['value'ML, 'fmt_spec'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = value; value = PyStackRef_NULL; + /* Variables=['value'L, 'fmt_spec'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = value; + /* Variables=['value'ML, 'fmt_spec'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(FOR_ITER) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER; (void)(opcode); @@ -5428,15 +7221,28 @@ _PyStackRef next; // _SPECIALIZE_FOR_ITER { - iter = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + iter = _tos; uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_ForIter(iter, next_instr, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = iter; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(FOR_ITER); @@ -5445,7 +7251,14 @@ } // _FOR_ITER { + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5464,18 +7277,24 @@ } assert(next_instr[oparg].op.code == END_FOR || next_instr[oparg].op.code == INSTRUMENTED_END_FOR); - JUMPBY(oparg + 1); + JUMPBY(oparg + 1);_PyStackRef _tmp; + _tmp = iter; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } next = PyStackRef_FromPyObjectSteal(next_o); } - stack_pointer[0] = next; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = next; + _tos = _tmp; DISPATCH(); } TARGET(FOR_ITER_GEN) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER_GEN; (void)(opcode); @@ -5492,7 +7311,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -5500,21 +7323,31 @@ } // _FOR_ITER_GEN_FRAME { - iter = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + iter = _tos; PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(gen) != &PyGen_Type) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)gen)) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #endif if (gen->gi_frame_state >= FRAME_EXECUTING) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -5530,9 +7363,16 @@ } // _PUSH_FRAME { + /* Variables=['iter'L, 'gen_frame'L]; base=0; sp=0; logical_sp=2 */ new_frame = gen_frame; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -5542,10 +7382,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(FOR_ITER_LIST) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER_LIST; (void)(opcode); @@ -5561,15 +7409,22 @@ /* Skip 1 cache entry */ // _ITER_CHECK_LIST { - iter = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + iter = _tos; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyListIter_Type) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced(iter_o)) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -5577,6 +7432,9 @@ _PyListIterObject *it = (_PyListIterObject *)iter_o; if (!_Py_IsOwnedByCurrentThread((PyObject *)it->it_seq) || !_PyObject_GC_IS_SHARED(it->it_seq)) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -5585,6 +7443,7 @@ } // _ITER_JUMP_LIST { + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(iter_o) == &PyListIter_Type); #ifdef Py_GIL_DISABLED @@ -5598,17 +7457,27 @@ it->it_index = -1; if (seq != NULL) { it->it_seq = NULL; + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(seq); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; } - JUMPBY(oparg + 1); + JUMPBY(oparg + 1);_PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; DISPATCH(); } #endif } // _ITER_NEXT_LIST { + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyListIterObject *it = (_PyListIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyListIter_Type); @@ -5619,32 +7488,54 @@ assert(_Py_IsOwnedByCurrentThread((PyObject *)seq) || _PyObject_GC_IS_SHARED(seq)); STAT_INC(FOR_ITER, hit); + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int result = _PyList_GetItemRefNoLock(seq, it->it_index, &next); stack_pointer = _PyFrame_GetStackPointer(frame); if (result < 0) { + _PyStackRef _tmp; + _tmp = iter; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } if (result == 0) { it->it_index = -1; - JUMPBY(oparg + 1); + JUMPBY(oparg + 1);_PyStackRef _tmp; + _tmp = iter; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } it->it_index++; #else assert(it->it_index < PyList_GET_SIZE(seq)); next = PyStackRef_FromPyObjectNew(PyList_GET_ITEM(seq, it->it_index++)); + stack_pointer += 1; #endif } - stack_pointer[0] = next; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = next; + /* Variables=['iter'L]; base=0; sp=1; logical_sp=1 */ + stack_pointer[-1] = iter; + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(FOR_ITER_RANGE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER_RANGE; (void)(opcode); @@ -5660,15 +7551,22 @@ /* Skip 1 cache entry */ // _ITER_CHECK_RANGE { - iter = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + iter = _tos; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -5677,6 +7575,7 @@ } // _ITER_JUMP_RANGE { + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); #ifdef Py_GIL_DISABLED @@ -5684,12 +7583,15 @@ #endif STAT_INC(FOR_ITER, hit); if (r->len <= 0) { - JUMPBY(oparg + 1); + JUMPBY(oparg + 1);_PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; DISPATCH(); } } // _ITER_NEXT_RANGE { + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); #ifdef Py_GIL_DISABLED @@ -5701,17 +7603,30 @@ r->len--; PyObject *res = PyLong_FromLong(value); if (res == NULL) { + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ JUMP_TO_LABEL(error); } next = PyStackRef_FromPyObjectSteal(res); } - stack_pointer[0] = next; + _PyStackRef _tmp; + _tmp = next; + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(FOR_ITER_TUPLE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER_TUPLE; (void)(opcode); @@ -5727,15 +7642,22 @@ /* Skip 1 cache entry */ // _ITER_CHECK_TUPLE { - iter = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + iter = _tos; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTupleIter_Type) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced(iter_o)) { + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -5744,6 +7666,7 @@ } // _ITER_JUMP_TUPLE { + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); (void)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -5757,18 +7680,28 @@ #ifndef Py_GIL_DISABLED if (seq != NULL) { it->it_seq = NULL; + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(seq); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; } #endif - JUMPBY(oparg + 1); + JUMPBY(oparg + 1);_PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; DISPATCH(); } } // _ITER_NEXT_TUPLE { + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyTupleIterObject *it = (_PyTupleIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -5780,13 +7713,20 @@ assert(it->it_index < PyTuple_GET_SIZE(seq)); next = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq, it->it_index++)); } - stack_pointer[0] = next; + _PyStackRef _tmp; + _tmp = next; + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(GET_AITER) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_AITER; (void)(opcode); @@ -5796,7 +7736,7 @@ INSTRUCTION_STATS(GET_AITER); _PyStackRef obj; _PyStackRef iter; - obj = stack_pointer[-1]; + obj = _tos; unaryfunc getter = NULL; PyObject *obj_o = PyStackRef_AsPyObjectBorrow(obj); PyObject *iter_o; @@ -5805,6 +7745,12 @@ getter = type->tp_as_async->am_aiter; } if (getter == NULL) { + /* Variables=['obj'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = obj; + /* Variables=['obj'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['obj'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_TypeError, "'async for' requires an object with " @@ -5813,16 +7759,24 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } + /* Variables=['obj'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = obj; + /* Variables=['obj'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['obj'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); iter_o = (*getter)(obj_o); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5841,13 +7795,14 @@ JUMP_TO_LABEL(error); } iter = PyStackRef_FromPyObjectSteal(iter_o); - stack_pointer[0] = iter; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; DISPATCH(); } TARGET(GET_ANEXT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_ANEXT; (void)(opcode); @@ -5857,7 +7812,13 @@ INSTRUCTION_STATS(GET_ANEXT); _PyStackRef aiter; _PyStackRef awaitable; - aiter = stack_pointer[-1]; + aiter = _tos; + /* Variables=['aiter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = aiter; + /* Variables=['aiter'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['aiter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *awaitable_o = _PyEval_GetANext(PyStackRef_AsPyObjectBorrow(aiter)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5865,13 +7826,14 @@ JUMP_TO_LABEL(error); } awaitable = PyStackRef_FromPyObjectSteal(awaitable_o); - stack_pointer[0] = awaitable; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = awaitable; + _tos = _tmp; DISPATCH(); } TARGET(GET_AWAITABLE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_AWAITABLE; (void)(opcode); @@ -5881,12 +7843,19 @@ INSTRUCTION_STATS(GET_AWAITABLE); _PyStackRef iterable; _PyStackRef iter; - iterable = stack_pointer[-1]; + iterable = _tos; + /* Variables=['iterable'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iterable; + /* Variables=['iterable'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5894,13 +7863,14 @@ JUMP_TO_LABEL(error); } iter = PyStackRef_FromPyObjectSteal(iter_o); - stack_pointer[0] = iter; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; DISPATCH(); } TARGET(GET_ITER) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_ITER; (void)(opcode); @@ -5910,12 +7880,19 @@ INSTRUCTION_STATS(GET_ITER); _PyStackRef iterable; _PyStackRef iter; - iterable = stack_pointer[-1]; + iterable = _tos; + /* Variables=['iterable'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iterable; + /* Variables=['iterable'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5923,13 +7900,14 @@ JUMP_TO_LABEL(error); } iter = PyStackRef_FromPyObjectSteal(iter_o); - stack_pointer[0] = iter; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; DISPATCH(); } TARGET(GET_LEN) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_LEN; (void)(opcode); @@ -5939,7 +7917,13 @@ INSTRUCTION_STATS(GET_LEN); _PyStackRef obj; _PyStackRef len; - obj = stack_pointer[-1]; + obj = _tos; + /* Variables=['obj'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = obj; + /* Variables=['obj'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['obj'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_ssize_t len_i = PyObject_Length(PyStackRef_AsPyObjectBorrow(obj)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5951,13 +7935,14 @@ JUMP_TO_LABEL(error); } len = PyStackRef_FromPyObjectSteal(len_o); - stack_pointer[0] = len; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = len; + _tos = _tmp; DISPATCH(); } TARGET(GET_YIELD_FROM_ITER) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_YIELD_FROM_ITER; (void)(opcode); @@ -5967,10 +7952,16 @@ INSTRUCTION_STATS(GET_YIELD_FROM_ITER); _PyStackRef iterable; _PyStackRef iter; - iterable = stack_pointer[-1]; + iterable = _tos; PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); if (PyCoro_CheckExact(iterable_o)) { if (!(_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE))) { + /* Variables=['iterable'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iterable; + /* Variables=['iterable'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetString(tstate, PyExc_TypeError, "cannot 'yield from' a coroutine object " @@ -5984,6 +7975,12 @@ iter = iterable; } else { + /* Variables=['iterable'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iterable; + /* Variables=['iterable'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(iterable_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5994,15 +7991,21 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = iterable; iterable = iter; + /* Variables=['iterable'L]; base=0; sp=1; logical_sp=1 */ stack_pointer[-1] = iterable; + /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; } - stack_pointer[-1] = iter; + _PyStackRef _tmp; + _tmp = iter; + _tos = _tmp; DISPATCH(); } TARGET(IMPORT_FROM) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = IMPORT_FROM; (void)(opcode); @@ -6012,8 +8015,14 @@ INSTRUCTION_STATS(IMPORT_FROM); _PyStackRef from; _PyStackRef res; - from = stack_pointer[-1]; + from = _tos; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + /* Variables=['from'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = from; + /* Variables=['from'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['from'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportFrom(tstate, PyStackRef_AsPyObjectBorrow(from), name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6021,13 +8030,14 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(IMPORT_NAME) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = IMPORT_NAME; (void)(opcode); @@ -6038,35 +8048,48 @@ _PyStackRef level; _PyStackRef fromlist; _PyStackRef res; - fromlist = stack_pointer[-1]; - level = stack_pointer[-2]; + fromlist = _tos; + level = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + /* Variables=['level'ML, 'fromlist'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = fromlist; + /* Variables=['level'ML, 'fromlist'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['level'ML, 'fromlist'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportName(tstate, frame, name, PyStackRef_AsPyObjectBorrow(fromlist), PyStackRef_AsPyObjectBorrow(level)); _PyStackRef tmp = fromlist; fromlist = PyStackRef_NULL; + /* Variables=['level'ML, 'fromlist'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = fromlist; + /* Variables=['level'ML, 'fromlist'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = level; level = PyStackRef_NULL; + /* Variables=['level'L, 'fromlist'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = level; + /* Variables=['level'ML, 'fromlist'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_CALL) { + assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_CALL; (void)(opcode); @@ -6086,9 +8109,19 @@ /* Skip 3 cache entries */ // _MAYBE_EXPAND_METHOD { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -6104,6 +8137,7 @@ } // _MONITOR_CALL { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-1 - oparg; sp=1; logical_sp=1 */ maybe_self = self_or_null; func = callable; int is_meth = !PyStackRef_IsNull(maybe_self[0]); @@ -6130,8 +8164,13 @@ } // _DO_CALL { - self_or_null = maybe_self; - callable = func; + /* Variables=[]; base=1; sp=1; logical_sp=1 */ + args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -6153,6 +8192,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -6177,6 +8217,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6226,6 +8267,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -6233,12 +8275,16 @@ } // _CHECK_PERIODIC { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6246,16 +8292,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_CALL_FUNCTION_EX) { + assert(STACK_LEVEL() - 4 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_CALL_FUNCTION_EX; (void)(opcode); @@ -6278,15 +8324,24 @@ _PyStackRef result; // _MAKE_CALLARGS_A_TUPLE { - kwargs_in = stack_pointer[-1]; - callargs = stack_pointer[-2]; - func = stack_pointer[-4]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + kwargs_in = _tos; + callargs = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + func = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs); if (PyTuple_CheckExact(callargs_o)) { tuple = callargs; kwargs_out = kwargs_in; } else { + /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[0] = kwargs_in; + /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'ML]; base=-3; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'ML]; base=-3; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6302,19 +8357,20 @@ kwargs_out = kwargs_in; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func'ML, 'unused'M]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs); stack_pointer = _PyFrame_GetStackPointer(frame); tuple = PyStackRef_FromPyObjectSteal(tuple_o); - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); + stack_pointer += 1; } } // _DO_CALL_FUNCTION_EX { + /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-3; sp=0; logical_sp=1 */ kwargs_st = kwargs_out; callargs_st = tuple; - null = stack_pointer[-3]; + null = stack_pointer[-2]; func_st = func; (void)null; PyObject *func = PyStackRef_AsPyObjectBorrow(func_st); @@ -6328,8 +8384,15 @@ assert(PyTuple_CheckExact(callargs)); PyObject *arg = PyTuple_GET_SIZE(callargs) > 0 ? PyTuple_GET_ITEM(callargs, 0) : &_PyInstrumentation_MISSING; - stack_pointer[-2] = callargs_st; - stack_pointer[-1] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[-1] = callargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[0] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -6374,8 +8437,9 @@ Py_ssize_t nargs = PyTuple_GET_SIZE(callargs); int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func)); - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex( tstate, func_st, locals, @@ -6383,6 +8447,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -6394,24 +8459,34 @@ assert(PyTuple_CheckExact(callargs)); PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st); assert(kwargs == NULL || PyDict_CheckExact(kwargs)); - stack_pointer[-2] = callargs_st; - stack_pointer[-1] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[-1] = callargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[0] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); result_o = PyObject_Call(func, callargs, kwargs); stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML]; base=-3; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(kwargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_st'ML, 'null'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(func_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6422,12 +8497,16 @@ } // _CHECK_PERIODIC { + /* Variables=['result'L]; base=-3; sp=-3; logical_sp=-2 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['result'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = result; + /* Variables=['result'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['result'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6435,16 +8514,16 @@ JUMP_TO_LABEL(error); } stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = result; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = result; + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_CALL_KW) { + assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_CALL_KW; (void)(opcode); @@ -6466,10 +8545,14 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD_KW { - kwnames_in = stack_pointer[-1]; - args = &stack_pointer[-1 - oparg]; - self_or_null = &stack_pointer[-2 - oparg]; - callable = &stack_pointer[-3 - oparg]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + kwnames_in = _tos; + args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ + self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ + callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -6478,14 +8561,22 @@ PyObject *method = ((PyMethodObject *)callable_o)->im_func; _PyStackRef temp = callable[0]; callable[0] = PyStackRef_FromPyObjectNew(method); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_in'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = kwnames_in; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_in'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_in'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; } kwnames_out = kwnames_in; } // _MONITOR_CALL_KW { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-2 - oparg; sp=0; logical_sp=1 */ int is_meth = !PyStackRef_IsNull(self_or_null[0]); PyObject *arg; if (is_meth) { @@ -6498,7 +8589,12 @@ arg = &_PyInstrumentation_MISSING; } PyObject *function = PyStackRef_AsPyObjectBorrow(callable[0]); - stack_pointer[-1] = kwnames_out; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer[0] = kwnames_out; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -6510,6 +8606,7 @@ } // _DO_CALL_KW { + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ kwnames = kwnames_out; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); @@ -6534,6 +8631,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6549,7 +8647,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-2 - oparg; sp=1; logical_sp=1 */ stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -6565,6 +8665,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6600,7 +8701,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-2 - oparg; sp=1; logical_sp=1 */ stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -6616,18 +8719,20 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_END_ASYNC_FOR) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_END_ASYNC_FOR; (void)(opcode); @@ -6641,17 +8746,26 @@ _PyStackRef exc_st; // _MONITOR_END_ASYNC_FOR { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ assert((next_instr-oparg)->op.code == END_SEND || (next_instr-oparg)->op.code >= MIN_INSTRUMENTED_OPCODE); INSTRUMENTED_JUMP(next_instr-oparg, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT); } // _END_ASYNC_FOR { - exc_st = stack_pointer[-1]; - awaitable_st = stack_pointer[-2]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + exc_st = _tos; + awaitable_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ JUMPBY(0); (void)oparg; PyObject *exc = PyStackRef_AsPyObjectBorrow(exc_st); assert(exc && PyExceptionInstance_Check(exc)); + /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = exc_st; + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6659,15 +8773,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = exc_st; exc_st = PyStackRef_NULL; + /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = exc_st; + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = awaitable_st; awaitable_st = PyStackRef_NULL; + /* Variables=['awaitable_st'L, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = awaitable_st; + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ } else { Py_INCREF(exc); @@ -6677,10 +8796,18 @@ JUMP_TO_LABEL(exception_unwind); } } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_END_FOR) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_END_FOR; (void)(opcode); @@ -6691,25 +8818,38 @@ INSTRUCTION_STATS(INSTRUMENTED_END_FOR); _PyStackRef receiver; _PyStackRef value; - value = stack_pointer[-1]; - receiver = stack_pointer[-2]; + value = _tos; + receiver = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (PyStackRef_GenCheck(receiver)) { + /* Variables=['receiver'ML, 'value'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['receiver'ML, 'value'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML, 'value'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = monitor_stop_iteration(tstate, frame, this_instr, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } + stack_pointer += -1; } - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = receiver; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_END_SEND) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_END_SEND; (void)(opcode); @@ -6722,28 +8862,43 @@ _PyStackRef receiver; _PyStackRef value; _PyStackRef val; - value = stack_pointer[-1]; - receiver = stack_pointer[-2]; + value = _tos; + receiver = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); if (PyGen_Check(receiver_o) || PyCoro_CheckExact(receiver_o)) { + /* Variables=['receiver'ML, 'value'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['receiver'ML, 'value'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML, 'value'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = monitor_stop_iteration(tstate, frame, this_instr, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } + stack_pointer += -1; } val = value; - stack_pointer[-2] = val; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = val; + /* Variables=['val'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(receiver); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = val; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_FOR_ITER) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_FOR_ITER; (void)(opcode); @@ -6753,14 +8908,22 @@ frame->instr_ptr = next_instr; next_instr += 2; INSTRUCTION_STATS(INSTRUMENTED_FOR_ITER); + _PyStackRef iter; + _PyStackRef next; /* Skip 1 cache entry */ - _PyStackRef iter_stackref = TOP(); - PyObject *iter = PyStackRef_AsPyObjectBorrow(iter_stackref); + iter = _tos; + PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); + /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); - PyObject *next = (*Py_TYPE(iter)->tp_iternext)(iter); + PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o); stack_pointer = _PyFrame_GetStackPointer(frame); - if (next != NULL) { - PUSH(PyStackRef_FromPyObjectSteal(next)); + if (next_o != NULL) { + next = PyStackRef_FromPyObjectSteal(next_o); INSTRUMENTED_JUMP(this_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT); } else { @@ -6778,12 +8941,22 @@ } assert(next_instr[oparg].op.code == END_FOR || next_instr[oparg].op.code == INSTRUMENTED_END_FOR); - JUMPBY(oparg + 1); + JUMPBY(oparg + 1);_PyStackRef _tmp; + _tmp = iter; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; + DISPATCH(); } + _PyStackRef _tmp; + _tmp = next; + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_INSTRUCTION) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_INSTRUCTION; (void)(opcode); @@ -6794,6 +8967,12 @@ next_instr += 1; INSTRUCTION_STATS(INSTRUMENTED_INSTRUCTION); opcode = INSTRUMENTED_INSTRUCTION; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int next_opcode = _Py_call_instrumentation_instruction( tstate, frame, this_instr); @@ -6806,11 +8985,17 @@ PAUSE_ADAPTIVE_COUNTER(next_instr[1].counter); } assert(next_opcode > 0 && next_opcode < 256); - opcode = next_opcode; + opcode = next_opcode;_PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_GOTO(); } TARGET(INSTRUMENTED_JUMP_BACKWARD) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_JUMP_BACKWARD; (void)(opcode); @@ -6823,25 +9008,38 @@ /* Skip 1 cache entry */ // _CHECK_PERIODIC { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } + stack_pointer += -1; } } // _MONITOR_JUMP_BACKWARD { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ INSTRUMENTED_JUMP(this_instr, next_instr - oparg, PY_MONITORING_EVENT_JUMP); } + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_JUMP_FORWARD) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_JUMP_FORWARD; (void)(opcode); @@ -6852,10 +9050,14 @@ next_instr += 1; INSTRUCTION_STATS(INSTRUMENTED_JUMP_FORWARD); INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_JUMP); + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_LINE) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_LINE; (void)(opcode); @@ -6874,6 +9076,12 @@ original_opcode = code->_co_monitoring->lines->data[index*code->_co_monitoring->lines->bytes_per_entry]; next_instr = this_instr; } else { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); original_opcode = _Py_call_instrumentation_line( tstate, frame, this_instr, prev_instr); @@ -6884,18 +9092,29 @@ } next_instr = frame->instr_ptr; if (next_instr != this_instr) { + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } + stack_pointer += -1; } if (_PyOpcode_Caches[original_opcode]) { _PyBinaryOpCache *cache = (_PyBinaryOpCache *)(next_instr+1); PAUSE_ADAPTIVE_COUNTER(cache->counter); } - opcode = original_opcode; + opcode = original_opcode;_PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH_GOTO(); } TARGET(INSTRUMENTED_LOAD_SUPER_ATTR) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_LOAD_SUPER_ATTR; (void)(opcode); @@ -6914,14 +9133,23 @@ /* Skip 1 cache entry */ // _LOAD_SUPER_ATTR { - self_st = stack_pointer[-1]; - class_st = stack_pointer[-2]; - global_super_st = stack_pointer[-3]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + self_st = _tos; + class_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + global_super_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); if (opcode == INSTRUMENTED_LOAD_SUPER_ATTR) { PyObject *arg = oparg & 2 ? class : &_PyInstrumentation_MISSING; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -6931,23 +9159,37 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-1] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-2] = class_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-3] = global_super_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_LABEL(error); } + stack_pointer += -1; } PyObject *stack[] = {class, self}; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *super = PyObject_Vectorcall(global_super, stack, oparg & 2, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6976,19 +9218,26 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-1] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-2] = class_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-3] = global_super_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (super == NULL) { JUMP_TO_LABEL(error); } @@ -7004,18 +9253,30 @@ } // _PUSH_NULL_CONDITIONAL { + /* Variables=['attr'L]; base=-2; sp=-2; logical_sp=-1 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } + _PyStackRef _tmp; + /* Variables=['attr'L, 'null'A]; base=-2; sp=-2; logical_sp=-1 + (oparg & 1) */ stack_pointer[0] = attr; + /* Variables=['attr'ML, 'null'A]; base=-2; sp=-2; logical_sp=-1 + (oparg & 1) */ stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'null'A]; base=-2; sp=-1 + (oparg & 1); logical_sp=-1 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2 + (oparg & 1); sp=-1 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 + (oparg & 1); sp=-2 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_NOT_TAKEN) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_NOT_TAKEN; (void)(opcode); @@ -7028,10 +9289,14 @@ INSTRUCTION_STATS(INSTRUMENTED_NOT_TAKEN); (void)this_instr; INSTRUMENTED_JUMP(prev_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT); + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_POP_ITER) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_ITER; (void)(opcode); @@ -7043,17 +9308,23 @@ next_instr += 1; INSTRUCTION_STATS(INSTRUMENTED_POP_ITER); _PyStackRef iter; - iter = stack_pointer[-1]; + iter = _tos; INSTRUMENTED_JUMP(prev_instr, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iter); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_FALSE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_JUMP_IF_FALSE; (void)(opcode); @@ -7063,18 +9334,27 @@ frame->instr_ptr = next_instr; next_instr += 2; INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_FALSE); + _PyStackRef cond; /* Skip 1 cache entry */ - _PyStackRef cond = POP(); + cond = _tos; assert(PyStackRef_BoolCheck(cond)); int jump = PyStackRef_IsFalse(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_NONE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_JUMP_IF_NONE; (void)(opcode); @@ -7084,22 +9364,31 @@ frame->instr_ptr = next_instr; next_instr += 2; INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_NONE); + _PyStackRef value; /* Skip 1 cache entry */ - _PyStackRef value_stackref = POP(); - int jump = PyStackRef_IsNone(value_stackref); + value = _tos; + int jump = PyStackRef_IsNone(value); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } else { _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(value_stackref); + PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_NOT_NONE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_JUMP_IF_NOT_NONE; (void)(opcode); @@ -7109,20 +9398,31 @@ frame->instr_ptr = next_instr; next_instr += 2; INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_NOT_NONE); + _PyStackRef value; /* Skip 1 cache entry */ - _PyStackRef value_stackref = POP(); - int jump = !PyStackRef_IsNone(value_stackref); + value = _tos; + int jump = !PyStackRef_IsNone(value); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(value_stackref); + PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } + else { + } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_TRUE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_JUMP_IF_TRUE; (void)(opcode); @@ -7132,18 +9432,27 @@ frame->instr_ptr = next_instr; next_instr += 2; INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_TRUE); + _PyStackRef cond; /* Skip 1 cache entry */ - _PyStackRef cond = POP(); + cond = _tos; assert(PyStackRef_BoolCheck(cond)); int jump = PyStackRef_IsTrue(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_RESUME) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_RESUME; (void)(opcode); @@ -7155,9 +9464,16 @@ INSTRUCTION_STATS(INSTRUMENTED_RESUME); // _LOAD_BYTECODE { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_CODEUNIT *bytecode = _PyEval_GetExecutableCode(tstate, _PyFrame_GetCode(frame)); @@ -7168,45 +9484,77 @@ ptrdiff_t off = this_instr - _PyFrame_GetBytecode(frame); frame->tlbc_index = ((_PyThreadStateImpl *)tstate)->tlbc_index; frame->instr_ptr = bytecode + off; - next_instr = frame->instr_ptr; + next_instr = frame->instr_ptr;_PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } #endif } // _MAYBE_INSTRUMENT { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->tracing == 0) { uintptr_t global_version = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & ~_PY_EVAL_EVENTS_MASK; uintptr_t code_version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); if (code_version != global_version) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - next_instr = this_instr; + next_instr = this_instr;_PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } } } // _CHECK_PERIODIC_IF_NOT_YIELD_FROM { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } + stack_pointer += -1; } } } // _MONITOR_RESUME { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation( tstate, oparg > 0, frame, this_instr); @@ -7218,10 +9566,17 @@ next_instr = frame->instr_ptr; } } + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_RETURN_VALUE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_RETURN_VALUE; (void)(opcode); @@ -7236,7 +9591,14 @@ _PyStackRef res; // _RETURN_VALUE_EVENT { - val = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + val = _tos; + /* Variables=['val'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = val; + /* Variables=['val'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_arg( tstate, PY_MONITORING_EVENT_PY_RETURN, @@ -7248,11 +9610,13 @@ } // _RETURN_VALUE { + /* Variables=['val'ML]; base=0; sp=1; logical_sp=1 */ retval = val; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(EMPTY()); _Py_LeaveRecursiveCallPy(tstate); @@ -7264,13 +9628,14 @@ res = temp; LLTRACE_RESUME_FRAME(); } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(INSTRUMENTED_YIELD_VALUE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_YIELD_VALUE; (void)(opcode); @@ -7285,7 +9650,14 @@ _PyStackRef value; // _YIELD_VALUE_EVENT { - val = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + val = _tos; + /* Variables=['val'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = val; + /* Variables=['val'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_arg( tstate, PY_MONITORING_EVENT_PY_YIELD, @@ -7295,12 +9667,18 @@ JUMP_TO_LABEL(error); } if (frame->instr_ptr != this_instr) { - next_instr = frame->instr_ptr; + next_instr = frame->instr_ptr;_PyStackRef _tmp; + _tmp = val; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } } // _YIELD_VALUE { + /* Variables=['val'ML]; base=0; sp=1; logical_sp=1 */ retval = val; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); frame->instr_ptr++; @@ -7311,6 +9689,7 @@ _PyStackRef temp = retval; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); tstate->exc_info = gen->gi_exc_state.previous_item; gen->gi_exc_state.previous_item = NULL; @@ -7332,9 +9711,9 @@ value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); } - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; DISPATCH(); } @@ -7347,18 +9726,26 @@ next_instr += 1; INSTRUCTION_STATS(INTERPRETER_EXIT); _PyStackRef retval; - retval = stack_pointer[-1]; + retval = _tos; assert(frame->owner == FRAME_OWNED_BY_INTERPRETER); assert(_PyFrame_IsIncomplete(frame)); tstate->current_frame = frame->previous; assert(!_PyErr_Occurred(tstate)); PyObject *result = PyStackRef_AsPyObjectSteal(retval); + LLTRACE_RESUME_FRAME(); + return result; + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - return result; + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; + DISPATCH(); } TARGET(IS_OP) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = IS_OP; (void)(opcode); @@ -7369,29 +9756,36 @@ _PyStackRef left; _PyStackRef right; _PyStackRef b; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _tos; + left = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int res = Py_Is(PyStackRef_AsPyObjectBorrow(left), PyStackRef_AsPyObjectBorrow(right)) ^ oparg; _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = right; right = PyStackRef_NULL; - stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = right; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - stack_pointer[-2] = left; + /* Variables=['left'L, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[-1] = left; + /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ b = res ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = b; + _tos = _tmp; DISPATCH(); } TARGET(JUMP_BACKWARD) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_BACKWARD; (void)(opcode); @@ -7405,36 +9799,52 @@ /* Skip 1 cache entry */ // _SPECIALIZE_JUMP_BACKWARD { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ #if ENABLE_SPECIALIZATION if (this_instr->op.code == JUMP_BACKWARD) { this_instr->op.code = tstate->interp->jit ? JUMP_BACKWARD_JIT : JUMP_BACKWARD_NO_JIT; - next_instr = this_instr; + next_instr = this_instr;_PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH_SAME_OPARG(); } #endif } // _CHECK_PERIODIC { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } + stack_pointer += -1; } } // _JUMP_BACKWARD_NO_INTERRUPT { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); } + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(JUMP_BACKWARD_JIT) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_BACKWARD_JIT; (void)(opcode); @@ -7448,24 +9858,34 @@ /* Skip 1 cache entry */ // _CHECK_PERIODIC { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } + stack_pointer += -1; } } // _JUMP_BACKWARD_NO_INTERRUPT { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); } // _JIT { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ #ifdef _Py_TIER2 _Py_BackoffCounter counter = this_instr[1].counter; if (backoff_counter_triggers(counter) && this_instr->op.code == JUMP_BACKWARD_JIT) { @@ -7475,6 +9895,12 @@ start--; } _PyExecutorObject *executor; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int optimized = _PyOptimizer_Optimize(frame, start, &executor, 0); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7495,13 +9921,21 @@ } else { ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter); + stack_pointer += 1; } #endif } + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(JUMP_BACKWARD_NO_INTERRUPT) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_BACKWARD_NO_INTERRUPT; (void)(opcode); @@ -7511,10 +9945,14 @@ INSTRUCTION_STATS(JUMP_BACKWARD_NO_INTERRUPT); assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(JUMP_BACKWARD_NO_JIT) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_BACKWARD_NO_JIT; (void)(opcode); @@ -7526,26 +9964,39 @@ /* Skip 1 cache entry */ // _CHECK_PERIODIC { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } + stack_pointer += -1; } } // _JUMP_BACKWARD_NO_INTERRUPT { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); } + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(JUMP_FORWARD) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_FORWARD; (void)(opcode); @@ -7554,10 +10005,14 @@ next_instr += 1; INSTRUCTION_STATS(JUMP_FORWARD); JUMPBY(oparg); + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(LIST_APPEND) { + assert(STACK_LEVEL() - 2 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = LIST_APPEND; (void)(opcode); @@ -7567,19 +10022,26 @@ INSTRUCTION_STATS(LIST_APPEND); _PyStackRef list; _PyStackRef v; - v = stack_pointer[-1]; - list = stack_pointer[-2 - (oparg-1)]; + v = _tos; + list = stack_pointer[-1 - (oparg-1)]; + /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list), PyStackRef_AsPyObjectSteal(v)); if (err < 0) { - JUMP_TO_LABEL(pop_1_error); + JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(LIST_EXTEND) { + assert(STACK_LEVEL() - 2 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = LIST_EXTEND; (void)(opcode); @@ -7589,10 +10051,17 @@ INSTRUCTION_STATS(LIST_EXTEND); _PyStackRef list_st; _PyStackRef iterable_st; - iterable_st = stack_pointer[-1]; - list_st = stack_pointer[-2 - (oparg-1)]; + iterable_st = _tos; + list_st = stack_pointer[-1 - (oparg-1)]; + /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); PyObject *iterable = PyStackRef_AsPyObjectBorrow(iterable_st); + /* Variables=['list_st'ML, 'unused'MA, 'iterable_st'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ + stack_pointer[0] = iterable_st; + /* Variables=['list_st'ML, 'unused'MA, 'iterable_st'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list_st'ML, 'unused'MA, 'iterable_st'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7612,6 +10081,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list_st'ML, 'unused'MA]; base=-1 - (oparg-1); sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7620,13 +10090,22 @@ assert(Py_IsNone(none_val)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list_st'ML, 'unused'MA]; base=-1 - (oparg-1); sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR; (void)(opcode); @@ -7642,16 +10121,29 @@ _PyStackRef *self_or_null; // _SPECIALIZE_LOAD_ATTR { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); next_instr = this_instr; + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_LoadAttr(owner, next_instr, name); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = owner; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(LOAD_ATTR); @@ -7661,11 +10153,18 @@ /* Skip 8 cache entries */ // _LOAD_ATTR { - self_or_null = &stack_pointer[0]; + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + self_or_null = &stack_pointer[1]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1); PyObject *attr_o; if (oparg & 1) { attr_o = NULL; + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int is_meth = _PyObject_GetMethod(PyStackRef_AsPyObjectBorrow(owner), name, &attr_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7676,6 +10175,7 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7684,15 +10184,21 @@ } self_or_null[0] = PyStackRef_NULL; stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } } else { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); attr_o = PyObject_GetAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7700,17 +10206,27 @@ JUMP_TO_LABEL(error); } stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } attr = PyStackRef_FromPyObjectSteal(attr_o); } + _PyStackRef _tmp; + /* Variables=['attr'L, 'self_or_null'A]; base=0; sp=1; logical_sp=1 + (oparg&1) */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self_or_null'A]; base=0; sp=1; logical_sp=1 + (oparg&1) */ stack_pointer += (oparg&1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self_or_null'A]; base=0; sp=1 + (oparg&1); logical_sp=1 + (oparg&1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=(oparg&1); sp=1 + (oparg&1); logical_sp=(oparg&1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=(oparg&1); sp=(oparg&1); logical_sp=(oparg&1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_CLASS) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_CLASS; (void)(opcode); @@ -7727,16 +10243,23 @@ /* Skip 1 cache entry */ // _CHECK_ATTR_CLASS { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7745,30 +10268,49 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_CLASS { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *descr = read_obj(&this_instr[6].cache); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); attr = PyStackRef_FromPyObjectNew(descr); + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; + /* Variables=['owner'L]; base=0; sp=1; logical_sp=1 */ stack_pointer[-1] = owner; + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } // _PUSH_NULL_CONDITIONAL { + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } + _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_CLASS_WITH_METACLASS_CHECK) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_CLASS_WITH_METACLASS_CHECK; (void)(opcode); @@ -7785,16 +10327,23 @@ /* Skip 1 cache entry */ // _CHECK_ATTR_CLASS { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7802,10 +10351,14 @@ } // _GUARD_TYPE_VERSION { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ uint32_t type_version = read_u32(&this_instr[4].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7813,30 +10366,49 @@ } // _LOAD_ATTR_CLASS { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *descr = read_obj(&this_instr[6].cache); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); attr = PyStackRef_FromPyObjectNew(descr); + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; + /* Variables=['owner'L]; base=0; sp=1; logical_sp=1 */ stack_pointer[-1] = owner; + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } // _PUSH_NULL_CONDITIONAL { + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } + _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - DISPATCH(); + /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ + _tos = _tmp; + DISPATCH(); } TARGET(LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN; (void)(opcode); @@ -7849,13 +10421,16 @@ static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size"); _PyStackRef owner; /* Skip 1 cache entry */ - owner = stack_pointer[-1]; + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); uint32_t func_version = read_u32(&this_instr[4].cache); PyObject *getattribute = read_obj(&this_instr[6].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert((oparg & 1) == 0); if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7863,6 +10438,9 @@ PyTypeObject *cls = Py_TYPE(owner_o); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(cls->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7871,6 +10449,9 @@ PyFunctionObject *f = (PyFunctionObject *)getattribute; assert(func_version != 0); if (f->func_version != func_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7878,6 +10459,9 @@ PyCodeObject *code = (PyCodeObject *)f->func_code; assert(code->co_argcount == 2); if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7886,7 +10470,6 @@ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1); _PyInterpreterFrame *new_frame = _PyFrame_PushUnchecked( tstate, PyStackRef_FromPyObjectNew(f), 2, frame); - STACK_SHRINK(1); new_frame->localsplus[0] = owner; new_frame->localsplus[1] = PyStackRef_FromPyObjectNew(name); frame->return_offset = 10 ; @@ -7894,6 +10477,7 @@ } TARGET(LOAD_ATTR_INSTANCE_VALUE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_INSTANCE_VALUE; (void)(opcode); @@ -7910,11 +10494,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7922,10 +10510,14 @@ } // _CHECK_MANAGED_OBJECT_HAS_VALUES { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7933,11 +10525,15 @@ } // _LOAD_ATTR_INSTANCE_VALUE { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ uint16_t offset = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset); PyObject *attr_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(*value_ptr); if (attr_o == NULL) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7946,6 +10542,9 @@ int increfed = _Py_TryIncrefCompareStackRef(value_ptr, attr_o, &attr); if (!increfed) { if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -7955,7 +10554,12 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - stack_pointer[-1] = attr; + /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7963,17 +10567,27 @@ /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } + _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_METHOD_LAZY_DICT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_METHOD_LAZY_DICT; (void)(opcode); @@ -7990,11 +10604,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8002,10 +10620,14 @@ } // _CHECK_ATTR_METHOD_LAZY_DICT { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ uint16_t dictoffset = read_u16(&this_instr[4].cache); char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); if (dict != NULL) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8014,6 +10636,7 @@ /* Skip 1 cache entry */ // _LOAD_ATTR_METHOD_LAZY_DICT { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *descr = read_obj(&this_instr[6].cache); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -8022,14 +10645,20 @@ attr = PyStackRef_FromPyObjectNew(descr); self = owner; } - stack_pointer[-1] = attr; - stack_pointer[0] = self; + _PyStackRef _tmp; + _tmp = self; + /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_METHOD_NO_DICT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_METHOD_NO_DICT; (void)(opcode); @@ -8046,11 +10675,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8059,6 +10692,7 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_METHOD_NO_DICT { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *descr = read_obj(&this_instr[6].cache); assert(oparg & 1); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); @@ -8068,14 +10702,20 @@ attr = PyStackRef_FromPyObjectNew(descr); self = owner; } - stack_pointer[-1] = attr; - stack_pointer[0] = self; + _PyStackRef _tmp; + _tmp = self; + /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_METHOD_WITH_VALUES) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_METHOD_WITH_VALUES; (void)(opcode); @@ -8092,11 +10732,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8104,10 +10748,14 @@ } // _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8115,11 +10763,15 @@ } // _GUARD_KEYS_VERSION { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ uint32_t keys_version = read_u32(&this_instr[4].cache); PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8127,6 +10779,7 @@ } // _LOAD_ATTR_METHOD_WITH_VALUES { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *descr = read_obj(&this_instr[6].cache); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -8135,14 +10788,20 @@ attr = PyStackRef_FromPyObjectNew(descr); self = owner; } - stack_pointer[-1] = attr; - stack_pointer[0] = self; + _PyStackRef _tmp; + _tmp = self; + /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_MODULE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_MODULE; (void)(opcode); @@ -8159,11 +10818,15 @@ /* Skip 1 cache entry */ // _LOAD_ATTR_MODULE { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t dict_version = read_u32(&this_instr[2].cache); uint16_t index = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (Py_TYPE(owner_o)->tp_getattro != PyModule_Type.tp_getattro) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8172,6 +10835,9 @@ assert(dict != NULL); PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != dict_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8181,6 +10847,9 @@ PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(keys) + index; PyObject *attr_o = FT_ATOMIC_LOAD_PTR_RELAXED(ep->me_value); if (attr_o == NULL) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8189,6 +10858,9 @@ int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr); if (!increfed) { if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8198,7 +10870,12 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - stack_pointer[-1] = attr; + /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8206,17 +10883,27 @@ /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } + _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_NONDESCRIPTOR_NO_DICT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_NONDESCRIPTOR_NO_DICT; (void)(opcode); @@ -8232,11 +10919,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8245,25 +10936,25 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_NONDESCRIPTOR_NO_DICT { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *descr = read_obj(&this_instr[6].cache); assert((oparg & 1) == 0); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); } - stack_pointer[0] = attr; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = attr; + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES; (void)(opcode); @@ -8279,11 +10970,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8291,10 +10986,14 @@ } // _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8302,11 +11001,15 @@ } // _GUARD_KEYS_VERSION { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ uint32_t keys_version = read_u32(&this_instr[4].cache); PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8314,24 +11017,24 @@ } // _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *descr = read_obj(&this_instr[6].cache); assert((oparg & 1) == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); } - stack_pointer[0] = attr; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = attr; + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_PROPERTY) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_PROPERTY; (void)(opcode); @@ -8347,7 +11050,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8355,11 +11062,15 @@ } // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8368,27 +11079,40 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_PROPERTY_FRAME { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *fget = read_obj(&this_instr[6].cache); assert((oparg & 1) == 0); assert(Py_IS_TYPE(fget, &PyFunction_Type)); PyFunctionObject *f = (PyFunctionObject *)fget; PyCodeObject *code = (PyCodeObject *)f->func_code; if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } if (code->co_kwonlyargcount) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } if (code->co_argcount != 1) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8399,6 +11123,7 @@ } // _SAVE_RETURN_OFFSET { + /* Variables=['new_frame'L]; base=0; sp=0; logical_sp=1 */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -8408,10 +11133,9 @@ } // _PUSH_FRAME { + /* Variables=['new_frame'L]; base=0; sp=0; logical_sp=1 */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -8421,10 +11145,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_SLOT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_SLOT; (void)(opcode); @@ -8441,11 +11173,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8453,11 +11189,15 @@ } // _LOAD_ATTR_SLOT { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ uint16_t index = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **addr = (PyObject **)((char *)owner_o + index); PyObject *attr_o = FT_ATOMIC_LOAD_PTR(*addr); if (attr_o == NULL) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8465,6 +11205,9 @@ #ifdef Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(addr, attr_o, &attr); if (!increfed) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8473,27 +11216,45 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; + /* Variables=['owner'L]; base=0; sp=1; logical_sp=1 */ stack_pointer[-1] = owner; + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } + _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_ATTR_WITH_HINT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_WITH_HINT; (void)(opcode); @@ -8510,11 +11271,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8522,11 +11287,15 @@ } // _LOAD_ATTR_WITH_HINT { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ uint16_t hint = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); PyDictObject *dict = _PyObject_GetManagedDict(owner_o); if (dict == NULL) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8535,6 +11304,9 @@ assert(PyDict_CheckExact((PyObject *)dict)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread((PyObject *)dict) && !_PyObject_GC_IS_SHARED(dict)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8543,6 +11315,9 @@ PyObject *attr_o; if (hint >= (size_t)FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_nentries)) { if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8551,6 +11326,9 @@ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); if (dk->dk_kind != DICT_KEYS_UNICODE) { if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8559,6 +11337,9 @@ PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(dk) + hint; if (FT_ATOMIC_LOAD_PTR_RELAXED(ep->me_key) != name) { if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8567,6 +11348,9 @@ attr_o = FT_ATOMIC_LOAD_PTR(ep->me_value); if (attr_o == NULL) { if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8577,6 +11361,9 @@ int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr); if (!increfed) { if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -8585,7 +11372,12 @@ #else attr = PyStackRef_FromPyObjectNew(attr_o); #endif - stack_pointer[-1] = attr; + /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8593,17 +11385,27 @@ /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } + _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_BUILD_CLASS) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_BUILD_CLASS; (void)(opcode); @@ -8613,6 +11415,12 @@ INSTRUCTION_STATS(LOAD_BUILD_CLASS); _PyStackRef bc; PyObject *bc_o; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(BUILTINS(), &_Py_ID(__build_class__), &bc_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8627,13 +11435,14 @@ JUMP_TO_LABEL(error); } bc = PyStackRef_FromPyObjectSteal(bc_o); - stack_pointer[0] = bc; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = bc; + _tos = _tmp; DISPATCH(); } TARGET(LOAD_COMMON_CONSTANT) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_COMMON_CONSTANT; (void)(opcode); @@ -8644,13 +11453,20 @@ _PyStackRef value; assert(oparg < NUM_COMMON_CONSTANTS); value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); - stack_pointer[0] = value; + _PyStackRef _tmp; + _tmp = value; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_CONST) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_CONST; (void)(opcode); @@ -8678,13 +11494,20 @@ } #endif #endif - stack_pointer[0] = value; + _PyStackRef _tmp; + _tmp = value; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_CONST_IMMORTAL) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_CONST_IMMORTAL; (void)(opcode); @@ -8697,13 +11520,20 @@ PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); assert(_Py_IsImmortal(obj)); value = PyStackRef_FromPyObjectImmortal(obj); - stack_pointer[0] = value; + _PyStackRef _tmp; + _tmp = value; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_CONST_MORTAL) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_CONST_MORTAL; (void)(opcode); @@ -8715,13 +11545,20 @@ _PyStackRef value; PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); value = PyStackRef_FromPyObjectNewMortal(obj); - stack_pointer[0] = value; + _PyStackRef _tmp; + _tmp = value; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_DEREF) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_DEREF; (void)(opcode); @@ -8731,25 +11568,35 @@ INSTRUCTION_STATS(LOAD_DEREF); _PyStackRef value; PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); value = _PyCell_GetStackRef(cell); stack_pointer = _PyFrame_GetStackPointer(frame); if (PyStackRef_IsNull(value)) { + /* Variables=['_tos'ML, 'value'L]; base=0; sp=1; logical_sp=2 */ stack_pointer[0] = value; + /* Variables=['_tos'ML, 'value'ML]; base=0; sp=1; logical_sp=2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML, 'value'ML]; base=0; sp=2; logical_sp=2 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; DISPATCH(); } TARGET(LOAD_FAST) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST; (void)(opcode); @@ -8760,13 +11607,20 @@ _PyStackRef value; assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; + _PyStackRef _tmp; + _tmp = value; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_FAST_AND_CLEAR) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_AND_CLEAR; (void)(opcode); @@ -8777,13 +11631,20 @@ _PyStackRef value; value = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_NULL; - stack_pointer[0] = value; + _PyStackRef _tmp; + _tmp = value; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_FAST_BORROW) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_BORROW; (void)(opcode); @@ -8794,13 +11655,20 @@ _PyStackRef value; assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; + _PyStackRef _tmp; + _tmp = value; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_FAST_BORROW_LOAD_FAST_BORROW) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_BORROW_LOAD_FAST_BORROW; (void)(opcode); @@ -8814,14 +11682,23 @@ uint32_t oparg2 = oparg & 15; value1 = PyStackRef_Borrow(GETLOCAL(oparg1)); value2 = PyStackRef_Borrow(GETLOCAL(oparg2)); - stack_pointer[0] = value1; - stack_pointer[1] = value2; + _PyStackRef _tmp; + _tmp = value2; + /* Variables=['_tos'L, 'value1'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML, 'value1'L]; base=0; sp=0; logical_sp=2 */ + /* Variables=['_tos'ML, 'value1'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[1] = value1; + /* Variables=['_tos'ML, 'value1'ML]; base=0; sp=0; logical_sp=2 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML, 'value1'ML]; base=0; sp=2; logical_sp=2 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_FAST_CHECK) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_CHECK; (void)(opcode); @@ -8832,6 +11709,12 @@ _PyStackRef value; _PyStackRef value_s = GETLOCAL(oparg); if (PyStackRef_IsNull(value_s)) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcCheckArg(tstate, PyExc_UnboundLocalError, UNBOUNDLOCAL_ERROR_MSG, @@ -8841,13 +11724,20 @@ JUMP_TO_LABEL(error); } value = PyStackRef_DUP(value_s); - stack_pointer[0] = value; + _PyStackRef _tmp; + _tmp = value; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_FAST_LOAD_FAST) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_LOAD_FAST; (void)(opcode); @@ -8861,14 +11751,23 @@ uint32_t oparg2 = oparg & 15; value1 = PyStackRef_DUP(GETLOCAL(oparg1)); value2 = PyStackRef_DUP(GETLOCAL(oparg2)); - stack_pointer[0] = value1; - stack_pointer[1] = value2; + _PyStackRef _tmp; + _tmp = value2; + /* Variables=['_tos'L, 'value1'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML, 'value1'L]; base=0; sp=0; logical_sp=2 */ + /* Variables=['_tos'ML, 'value1'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[1] = value1; + /* Variables=['_tos'ML, 'value1'ML]; base=0; sp=0; logical_sp=2 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML, 'value1'ML]; base=0; sp=2; logical_sp=2 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_FROM_DICT_OR_DEREF) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FROM_DICT_OR_DEREF; (void)(opcode); @@ -8878,13 +11777,19 @@ INSTRUCTION_STATS(LOAD_FROM_DICT_OR_DEREF); _PyStackRef class_dict_st; _PyStackRef value; - class_dict_st = stack_pointer[-1]; + class_dict_st = _tos; PyObject *value_o; PyObject *name; PyObject *class_dict = PyStackRef_AsPyObjectBorrow(class_dict_st); assert(class_dict); assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus); name = PyTuple_GET_ITEM(_PyFrame_GetCode(frame)->co_localsplusnames, oparg); + /* Variables=['class_dict_st'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = class_dict_st; + /* Variables=['class_dict_st'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['class_dict_st'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(class_dict, name, &value_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8903,17 +11808,19 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(class_dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectSteal(value_o); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; DISPATCH(); } TARGET(LOAD_FROM_DICT_OR_GLOBALS) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FROM_DICT_OR_GLOBALS; (void)(opcode); @@ -8923,14 +11830,21 @@ INSTRUCTION_STATS(LOAD_FROM_DICT_OR_GLOBALS); _PyStackRef mod_or_class_dict; _PyStackRef v; - mod_or_class_dict = stack_pointer[-1]; + mod_or_class_dict = _tos; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *v_o; + /* Variables=['mod_or_class_dict'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = mod_or_class_dict; + /* Variables=['mod_or_class_dict'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['mod_or_class_dict'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(PyStackRef_AsPyObjectBorrow(mod_or_class_dict), name, &v_o); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(mod_or_class_dict); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8982,13 +11896,14 @@ } } v = PyStackRef_FromPyObjectSteal(v_o); - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = v; + _tos = _tmp; DISPATCH(); } TARGET(LOAD_GLOBAL) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_GLOBAL; (void)(opcode); @@ -9003,15 +11918,28 @@ _PyStackRef *null; // _SPECIALIZE_LOAD_GLOBAL { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); next_instr = this_instr; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_LoadGlobal(GLOBALS(), BUILTINS(), next_instr, name); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(LOAD_GLOBAL); @@ -9023,8 +11951,15 @@ /* Skip 1 cache entry */ // _LOAD_GLOBAL { - res = &stack_pointer[0]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + res = &stack_pointer[1]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_LoadGlobalStackRef(GLOBALS(), BUILTINS(), name, res); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9034,17 +11969,27 @@ } // _PUSH_NULL_CONDITIONAL { + /* Variables=['_tos'ML, 'res'A]; base=0; sp=1; logical_sp=2 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } + _PyStackRef _tmp; stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML, 'res'A, 'null'A]; base=0; sp=2 + (oparg & 1); logical_sp=2 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=1 + (oparg & 1); sp=2 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 + (oparg & 1); sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_GLOBAL_BUILTIN) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_GLOBAL_BUILTIN; (void)(opcode); @@ -9060,15 +12005,22 @@ /* Skip 1 cache entry */ // _GUARD_GLOBALS_VERSION { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ uint16_t version = read_u16(&this_instr[2].cache); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -9077,16 +12029,23 @@ } // _LOAD_GLOBAL_BUILTINS { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ uint16_t version = read_u16(&this_instr[3].cache); uint16_t index = read_u16(&this_instr[4].cache); PyDictObject *dict = (PyDictObject *)BUILTINS(); if (!PyDict_CheckExact(dict)) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -9095,6 +12054,9 @@ PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); if (res_o == NULL) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -9102,6 +12064,9 @@ #if Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); if (!increfed) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -9113,18 +12078,33 @@ } // _PUSH_NULL_CONDITIONAL { - null = &stack_pointer[1]; + /* Variables=['_tos'L, 'res'L]; base=0; sp=0; logical_sp=2 */ + null = &stack_pointer[2]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - stack_pointer[0] = res; - stack_pointer += 1 + (oparg & 1); + _PyStackRef _tmp; + /* Variables=['_tos'L, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ + /* Variables=['_tos'ML, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ + stack_pointer[1] = res; + /* Variables=['_tos'ML, 'res'ML, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ + stack_pointer += 2 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML, 'res'ML, 'null'A]; base=0; sp=2 + (oparg & 1); logical_sp=2 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=1 + (oparg & 1); sp=2 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 + (oparg & 1); sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_GLOBAL_MODULE) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_GLOBAL_MODULE; (void)(opcode); @@ -9140,19 +12120,27 @@ /* Skip 1 cache entry */ // _NOP { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ } // _LOAD_GLOBAL_MODULE { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ uint16_t version = read_u16(&this_instr[2].cache); uint16_t index = read_u16(&this_instr[4].cache); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -9162,6 +12150,9 @@ assert(index < DK_SIZE(keys)); PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); if (res_o == NULL) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -9169,6 +12160,9 @@ #if Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); if (!increfed) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -9180,18 +12174,33 @@ } // _PUSH_NULL_CONDITIONAL { - null = &stack_pointer[1]; + /* Variables=['_tos'L, 'res'L]; base=0; sp=0; logical_sp=2 */ + null = &stack_pointer[2]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - stack_pointer[0] = res; - stack_pointer += 1 + (oparg & 1); + _PyStackRef _tmp; + /* Variables=['_tos'L, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ + /* Variables=['_tos'ML, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ + stack_pointer[1] = res; + /* Variables=['_tos'ML, 'res'ML, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ + stack_pointer += 2 + (oparg & 1); + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML, 'res'ML, 'null'A]; base=0; sp=2 + (oparg & 1); logical_sp=2 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=1 + (oparg & 1); sp=2 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 + (oparg & 1); sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_LOCALS) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_LOCALS; (void)(opcode); @@ -9202,6 +12211,12 @@ _PyStackRef locals; PyObject *l = LOCALS(); if (l == NULL) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetString(tstate, PyExc_SystemError, "no locals found"); @@ -9209,13 +12224,20 @@ JUMP_TO_LABEL(error); } locals = PyStackRef_FromPyObjectNew(l); - stack_pointer[0] = locals; + _PyStackRef _tmp; + _tmp = locals; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_NAME) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_NAME; (void)(opcode); @@ -9225,6 +12247,12 @@ INSTRUCTION_STATS(LOAD_NAME); _PyStackRef v; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *v_o = _PyEval_LoadName(tstate, frame, name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9232,13 +12260,14 @@ JUMP_TO_LABEL(error); } v = PyStackRef_FromPyObjectSteal(v_o); - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = v; + _tos = _tmp; DISPATCH(); } TARGET(LOAD_SMALL_INT) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SMALL_INT; (void)(opcode); @@ -9250,13 +12279,20 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); - stack_pointer[0] = value; + _PyStackRef _tmp; + _tmp = value; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_SPECIAL) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SPECIAL; (void)(opcode); @@ -9267,13 +12303,11 @@ _PyStackRef owner; _PyStackRef attr; _PyStackRef self_or_null; - owner = stack_pointer[-1]; + owner = _tos; assert(oparg <= SPECIAL_MAX); PyObject *owner_o = PyStackRef_AsPyObjectSteal(owner); PyObject *name = _Py_SpecialMethods[oparg].name; PyObject *self_or_null_o; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PyObject_LookupSpecialMethod(owner_o, name, &self_or_null_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9290,14 +12324,20 @@ attr = PyStackRef_FromPyObjectSteal(attr_o); self_or_null = self_or_null_o == NULL ? PyStackRef_NULL : PyStackRef_FromPyObjectSteal(self_or_null_o); + _PyStackRef _tmp; + _tmp = self_or_null; + /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = attr; - stack_pointer[1] = self_or_null; - stack_pointer += 2; + /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_SUPER_ATTR) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SUPER_ATTR; (void)(opcode); @@ -9316,17 +12356,32 @@ _PyStackRef *null; // _SPECIALIZE_LOAD_SUPER_ATTR { - class_st = stack_pointer[-2]; - global_super_st = stack_pointer[-3]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + class_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + global_super_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT int load_method = oparg & 1; if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['global_super_st'ML, 'class_st'ML, '_tos'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['global_super_st'ML, 'class_st'ML, '_tos'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML, '_tos'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_LoadSuperAttr(global_super_st, class_st, next_instr, load_method); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(LOAD_SUPER_ATTR); @@ -9335,12 +12390,19 @@ } // _LOAD_SUPER_ATTR { - self_st = stack_pointer[-1]; + /* Variables=['global_super_st'ML, 'class_st'ML, '_tos'L]; base=-2; sp=0; logical_sp=1 */ + self_st = _tos; PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); if (opcode == INSTRUMENTED_LOAD_SUPER_ATTR) { PyObject *arg = oparg & 2 ? class : &_PyInstrumentation_MISSING; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -9350,23 +12412,37 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-1] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-2] = class_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-3] = global_super_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_LABEL(error); } + stack_pointer += -1; } PyObject *stack[] = {class, self}; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *super = PyObject_Vectorcall(global_super, stack, oparg & 2, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9395,19 +12471,26 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-1] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-2] = class_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-3] = global_super_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (super == NULL) { JUMP_TO_LABEL(error); } @@ -9423,18 +12506,30 @@ } // _PUSH_NULL_CONDITIONAL { + /* Variables=['attr'L]; base=-2; sp=-2; logical_sp=-1 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } + _PyStackRef _tmp; + /* Variables=['attr'L, 'null'A]; base=-2; sp=-2; logical_sp=-1 + (oparg & 1) */ stack_pointer[0] = attr; + /* Variables=['attr'ML, 'null'A]; base=-2; sp=-2; logical_sp=-1 + (oparg & 1) */ stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'null'A]; base=-2; sp=-1 + (oparg & 1); logical_sp=-1 + (oparg & 1) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2 + (oparg & 1); sp=-1 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2 + (oparg & 1); sp=-2 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ + _tos = _tmp; DISPATCH(); } TARGET(LOAD_SUPER_ATTR_ATTR) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SUPER_ATTR_ATTR; (void)(opcode); @@ -9450,53 +12545,75 @@ _PyStackRef self_st; _PyStackRef attr_st; /* Skip 1 cache entry */ - self_st = stack_pointer[-1]; - class_st = stack_pointer[-2]; - global_super_st = stack_pointer[-3]; + self_st = _tos; + class_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + global_super_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); assert(!(oparg & 1)); if (global_super != (PyObject *)&PySuper_Type) { + _PyStackRef _tmp; + _tmp = self_st; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_SUPER_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR)); JUMP_TO_PREDICTED(LOAD_SUPER_ATTR); } if (!PyType_Check(class)) { + _PyStackRef _tmp; + _tmp = self_st; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_SUPER_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR)); JUMP_TO_PREDICTED(LOAD_SUPER_ATTR); } STAT_INC(LOAD_SUPER_ATTR, hit); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-1] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-2] = class_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-3] = global_super_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (attr == NULL) { JUMP_TO_LABEL(error); } attr_st = PyStackRef_FromPyObjectSteal(attr); - stack_pointer[0] = attr_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = attr_st; + _tos = _tmp; DISPATCH(); } TARGET(LOAD_SUPER_ATTR_METHOD) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SUPER_ATTR_METHOD; (void)(opcode); @@ -9513,19 +12630,27 @@ _PyStackRef attr; _PyStackRef self_or_null; /* Skip 1 cache entry */ - self_st = stack_pointer[-1]; - class_st = stack_pointer[-2]; - global_super_st = stack_pointer[-3]; + self_st = _tos; + class_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + global_super_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); assert(oparg & 1); if (global_super != (PyObject *)&PySuper_Type) { + _PyStackRef _tmp; + _tmp = self_st; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_SUPER_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR)); JUMP_TO_PREDICTED(LOAD_SUPER_ATTR); } if (!PyType_Check(class)) { + _PyStackRef _tmp; + _tmp = self_st; + _tos = _tmp; UPDATE_MISS_STATS(LOAD_SUPER_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR)); JUMP_TO_PREDICTED(LOAD_SUPER_ATTR); @@ -9534,6 +12659,12 @@ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); PyTypeObject *cls = (PyTypeObject *)class; int method_found = 0; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = self_st; + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PySuper_Lookup(cls, self, name, Py_TYPE(self)->tp_getattro == PyObject_GenericGetAttr ? &method_found : NULL); @@ -9546,36 +12677,48 @@ } else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self_st); stack_pointer = _PyFrame_GetStackPointer(frame); self_or_null = PyStackRef_NULL; stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = global_super_st; global_super_st = self_or_null; + /* Variables=['global_super_st'L, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = global_super_st; + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; + /* Variables=['global_super_st'ML, 'class_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = class_st; + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ attr = PyStackRef_FromPyObjectSteal(attr_o); + _PyStackRef _tmp; + _tmp = self_or_null; + /* Variables=['attr'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = attr; - stack_pointer[1] = self_or_null; - stack_pointer += 2; + /* Variables=['attr'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=-2; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(MAKE_CELL) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MAKE_CELL; (void)(opcode); @@ -9590,13 +12733,26 @@ } _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_FromPyObjectSteal(cell); + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(MAKE_FUNCTION) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MAKE_FUNCTION; (void)(opcode); @@ -9606,14 +12762,21 @@ INSTRUCTION_STATS(MAKE_FUNCTION); _PyStackRef codeobj_st; _PyStackRef func; - codeobj_st = stack_pointer[-1]; + codeobj_st = _tos; PyObject *codeobj = PyStackRef_AsPyObjectBorrow(codeobj_st); + /* Variables=['codeobj_st'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = codeobj_st; + /* Variables=['codeobj_st'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['codeobj_st'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyFunctionObject *func_obj = (PyFunctionObject *) PyFunction_New(codeobj, GLOBALS()); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(codeobj_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9623,13 +12786,14 @@ _PyFunction_SetVersion( func_obj, ((PyCodeObject *)codeobj)->co_version); func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj); - stack_pointer[0] = func; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = func; + _tos = _tmp; DISPATCH(); } TARGET(MAP_ADD) { + assert(STACK_LEVEL() - 3 + (oparg - 1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = MAP_ADD; (void)(opcode); @@ -9640,11 +12804,19 @@ _PyStackRef dict_st; _PyStackRef key; _PyStackRef value; - value = stack_pointer[-1]; - key = stack_pointer[-2]; - dict_st = stack_pointer[-3 - (oparg - 1)]; + value = _tos; + key = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + dict_st = stack_pointer[-2 - (oparg - 1)]; + /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); + /* Variables=['dict_st'ML, 'unused'MA, 'key'ML, 'value'L]; base=-2 - (oparg - 1); sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['dict_st'ML, 'unused'MA, 'key'ML, 'value'ML]; base=-2 - (oparg - 1); sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict_st'ML, 'unused'MA, 'key'ML, 'value'ML]; base=-2 - (oparg - 1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_SetItem_Take2( (PyDictObject *)dict, @@ -9655,12 +12827,21 @@ if (err != 0) { JUMP_TO_LABEL(pop_2_error); } + _PyStackRef _tmp; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict_st'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(MATCH_CLASS) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MATCH_CLASS; (void)(opcode); @@ -9672,10 +12853,18 @@ _PyStackRef type; _PyStackRef names; _PyStackRef attrs; - names = stack_pointer[-1]; - type = stack_pointer[-2]; - subject = stack_pointer[-3]; + names = _tos; + type = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + subject = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ assert(PyTuple_CheckExact(PyStackRef_AsPyObjectBorrow(names))); + /* Variables=['subject'ML, 'type'ML, 'names'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = names; + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attrs_o = _PyEval_MatchClass(tstate, PyStackRef_AsPyObjectBorrow(subject), @@ -9683,19 +12872,26 @@ PyStackRef_AsPyObjectBorrow(names)); _PyStackRef tmp = names; names = PyStackRef_NULL; + /* Variables=['subject'ML, 'type'ML, 'names'L]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-1] = names; + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = type; type = PyStackRef_NULL; + /* Variables=['subject'ML, 'type'L, 'names'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-2] = type; + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = subject; subject = PyStackRef_NULL; + /* Variables=['subject'L, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-3] = subject; + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (attrs_o) { assert(PyTuple_CheckExact(attrs_o)); attrs = PyStackRef_FromPyObjectSteal(attrs_o); @@ -9706,13 +12902,14 @@ } attrs = PyStackRef_None; } - stack_pointer[0] = attrs; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = attrs; + _tos = _tmp; DISPATCH(); } TARGET(MATCH_KEYS) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MATCH_KEYS; (void)(opcode); @@ -9723,8 +12920,15 @@ _PyStackRef subject; _PyStackRef keys; _PyStackRef values_or_none; - keys = stack_pointer[-1]; - subject = stack_pointer[-2]; + keys = _tos; + subject = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + /* Variables=['subject'ML, 'keys'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = keys; + /* Variables=['subject'ML, 'keys'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject'ML, 'keys'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *values_or_none_o = _PyEval_MatchKeys(tstate, PyStackRef_AsPyObjectBorrow(subject), PyStackRef_AsPyObjectBorrow(keys)); @@ -9733,13 +12937,14 @@ JUMP_TO_LABEL(error); } values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o); - stack_pointer[0] = values_or_none; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = values_or_none; + _tos = _tmp; DISPATCH(); } TARGET(MATCH_MAPPING) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MATCH_MAPPING; (void)(opcode); @@ -9749,16 +12954,23 @@ INSTRUCTION_STATS(MATCH_MAPPING); _PyStackRef subject; _PyStackRef res; - subject = stack_pointer[-1]; + subject = _tos; int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = res; + _PyStackRef _tmp; + _tmp = res; + /* Variables=['subject'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = subject; + /* Variables=['subject'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(MATCH_SEQUENCE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MATCH_SEQUENCE; (void)(opcode); @@ -9768,16 +12980,23 @@ INSTRUCTION_STATS(MATCH_SEQUENCE); _PyStackRef subject; _PyStackRef res; - subject = stack_pointer[-1]; + subject = _tos; int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = res; + _PyStackRef _tmp; + _tmp = res; + /* Variables=['subject'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = subject; + /* Variables=['subject'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(NOP) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = NOP; (void)(opcode); @@ -9785,10 +13004,14 @@ frame->instr_ptr = next_instr; next_instr += 1; INSTRUCTION_STATS(NOP); + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(NOT_TAKEN) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = NOT_TAKEN; (void)(opcode); @@ -9796,10 +13019,14 @@ frame->instr_ptr = next_instr; next_instr += 1; INSTRUCTION_STATS(NOT_TAKEN); + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(POP_EXCEPT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_EXCEPT; (void)(opcode); @@ -9808,19 +13035,31 @@ next_instr += 1; INSTRUCTION_STATS(POP_EXCEPT); _PyStackRef exc_value; - exc_value = stack_pointer[-1]; + exc_value = _tos; _PyErr_StackItem *exc_info = tstate->exc_info; + /* Variables=['exc_value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = exc_value; + /* Variables=['exc_value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['exc_value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_XSETREF(exc_info->exc_value, PyStackRef_IsNone(exc_value) ? NULL : PyStackRef_AsPyObjectSteal(exc_value)); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; + _PyStackRef _tmp; + _tmp = stack_pointer[-2]; + /* Variables=[]; base=-1; sp=1; logical_sp=-1 */ + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(POP_ITER) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_ITER; (void)(opcode); @@ -9829,16 +13068,22 @@ next_instr += 1; INSTRUCTION_STATS(POP_ITER); _PyStackRef value; - value = stack_pointer[-1]; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + value = _tos; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(POP_JUMP_IF_FALSE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_JUMP_IF_FALSE; (void)(opcode); @@ -9850,17 +13095,23 @@ INSTRUCTION_STATS(POP_JUMP_IF_FALSE); _PyStackRef cond; /* Skip 1 cache entry */ - cond = stack_pointer[-1]; + cond = _tos; assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsFalse(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(POP_JUMP_IF_NONE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_JUMP_IF_NONE; (void)(opcode); @@ -9876,34 +13127,51 @@ /* Skip 1 cache entry */ // _IS_NONE { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; if (PyStackRef_IsNone(value)) { b = PyStackRef_True; } else { b = PyStackRef_False; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = b; + /* Variables=['value'L]; base=0; sp=1; logical_sp=1 */ stack_pointer[-1] = value; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; } } // _POP_JUMP_IF_TRUE { + /* Variables=['b'L]; base=0; sp=0; logical_sp=1 */ cond = b; assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsTrue(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(POP_JUMP_IF_NOT_NONE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_JUMP_IF_NOT_NONE; (void)(opcode); @@ -9919,34 +13187,51 @@ /* Skip 1 cache entry */ // _IS_NONE { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; if (PyStackRef_IsNone(value)) { b = PyStackRef_True; } else { b = PyStackRef_False; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = b; + /* Variables=['value'L]; base=0; sp=1; logical_sp=1 */ stack_pointer[-1] = value; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; } } // _POP_JUMP_IF_FALSE { + /* Variables=['b'L]; base=0; sp=0; logical_sp=1 */ cond = b; assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsFalse(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(POP_JUMP_IF_TRUE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_JUMP_IF_TRUE; (void)(opcode); @@ -9958,17 +13243,23 @@ INSTRUCTION_STATS(POP_JUMP_IF_TRUE); _PyStackRef cond; /* Skip 1 cache entry */ - cond = stack_pointer[-1]; + cond = _tos; assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsTrue(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(POP_TOP) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_TOP; (void)(opcode); @@ -9977,16 +13268,22 @@ next_instr += 1; INSTRUCTION_STATS(POP_TOP); _PyStackRef value; - value = stack_pointer[-1]; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + value = _tos; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(PUSH_EXC_INFO) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = PUSH_EXC_INFO; (void)(opcode); @@ -9997,7 +13294,7 @@ _PyStackRef exc; _PyStackRef prev_exc; _PyStackRef new_exc; - exc = stack_pointer[-1]; + exc = _tos; _PyErr_StackItem *exc_info = tstate->exc_info; if (exc_info->exc_value != NULL) { prev_exc = PyStackRef_FromPyObjectSteal(exc_info->exc_value); @@ -10008,14 +13305,20 @@ assert(PyStackRef_ExceptionInstanceCheck(exc)); exc_info->exc_value = PyStackRef_AsPyObjectNew(exc); new_exc = exc; - stack_pointer[-1] = prev_exc; - stack_pointer[0] = new_exc; + _PyStackRef _tmp; + _tmp = new_exc; + /* Variables=['prev_exc'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = prev_exc; + /* Variables=['prev_exc'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['prev_exc'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(PUSH_NULL) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = PUSH_NULL; (void)(opcode); @@ -10025,13 +13328,20 @@ INSTRUCTION_STATS(PUSH_NULL); _PyStackRef res; res = PyStackRef_NULL; - stack_pointer[0] = res; + _PyStackRef _tmp; + _tmp = res; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(RAISE_VARARGS) { + assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = RAISE_VARARGS; (void)(opcode); @@ -10042,12 +13352,20 @@ next_instr += 1; INSTRUCTION_STATS(RAISE_VARARGS); _PyStackRef *args; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; + /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ assert(oparg < 3); PyObject *cause = oparg == 2 ? PyStackRef_AsPyObjectSteal(args[1]) : NULL; PyObject *exc = oparg > 0 ? PyStackRef_AsPyObjectSteal(args[0]) : NULL; stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = do_raise(tstate, exc, cause); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10061,6 +13379,7 @@ } TARGET(RERAISE) { + assert(STACK_LEVEL() - 1 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = RERAISE; (void)(opcode); @@ -10072,8 +13391,9 @@ INSTRUCTION_STATS(RERAISE); _PyStackRef *values; _PyStackRef exc_st; - exc_st = stack_pointer[-1]; - values = &stack_pointer[-1 - oparg]; + exc_st = _tos; + values = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ PyObject *exc = PyStackRef_AsPyObjectSteal(exc_st); assert(oparg >= 0 && oparg <= 2); if (oparg) { @@ -10083,8 +13403,6 @@ assert(!_PyErr_Occurred(tstate)); } else { - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetString(tstate, PyExc_SystemError, "lasti is not an int"); Py_DECREF(exc); @@ -10093,8 +13411,6 @@ } } assert(exc && PyExceptionInstance_Check(exc)); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetRaisedException(tstate, exc); monitor_reraise(tstate, frame, this_instr); @@ -10102,6 +13418,7 @@ } TARGET(RESERVED) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RESERVED; (void)(opcode); @@ -10111,10 +13428,14 @@ INSTRUCTION_STATS(RESERVED); assert(0 && "Executing RESERVED instruction."); Py_FatalError("Executing RESERVED instruction."); + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(RESUME) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RESUME; (void)(opcode); @@ -10127,9 +13448,16 @@ (void)this_instr; // _LOAD_BYTECODE { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_CODEUNIT *bytecode = _PyEval_GetExecutableCode(tstate, _PyFrame_GetCode(frame)); @@ -10140,30 +13468,48 @@ ptrdiff_t off = this_instr - _PyFrame_GetBytecode(frame); frame->tlbc_index = ((_PyThreadStateImpl *)tstate)->tlbc_index; frame->instr_ptr = bytecode + off; - next_instr = frame->instr_ptr; + next_instr = frame->instr_ptr;_PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } #endif } // _MAYBE_INSTRUMENT { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->tracing == 0) { uintptr_t global_version = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & ~_PY_EVAL_EVENTS_MASK; uintptr_t code_version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); if (code_version != global_version) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - next_instr = this_instr; + next_instr = this_instr;_PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } } } // _QUICKEN_RESUME { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ #if ENABLE_SPECIALIZATION_FT if (tstate->tracing == 0 && this_instr->op.code == RESUME) { FT_ATOMIC_STORE_UINT8_RELAXED(this_instr->op.code, RESUME_CHECK); @@ -10172,23 +13518,35 @@ } // _CHECK_PERIODIC_IF_NOT_YIELD_FROM { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } + stack_pointer += -1; } } } + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(RESUME_CHECK) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RESUME_CHECK; (void)(opcode); @@ -10201,6 +13559,9 @@ static_assert(0 == 0, "incorrect cache size"); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(RESUME); assert(_PyOpcode_Deopt[opcode] == (RESUME)); JUMP_TO_PREDICTED(RESUME); @@ -10211,6 +13572,9 @@ uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); assert((version & _PY_EVAL_EVENTS_MASK) == 0); if (eval_breaker != version) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(RESUME); assert(_PyOpcode_Deopt[opcode] == (RESUME)); JUMP_TO_PREDICTED(RESUME); @@ -10218,15 +13582,22 @@ #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(RESUME); assert(_PyOpcode_Deopt[opcode] == (RESUME)); JUMP_TO_PREDICTED(RESUME); } #endif + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; DISPATCH(); } TARGET(RETURN_GENERATOR) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RETURN_GENERATOR; (void)(opcode); @@ -10237,6 +13608,12 @@ _PyStackRef res; assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10259,13 +13636,14 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen); LLTRACE_RESUME_FRAME(); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(RETURN_VALUE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RETURN_VALUE; (void)(opcode); @@ -10275,11 +13653,9 @@ INSTRUCTION_STATS(RETURN_VALUE); _PyStackRef retval; _PyStackRef res; - retval = stack_pointer[-1]; + retval = _tos; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); assert(EMPTY()); _Py_LeaveRecursiveCallPy(tstate); @@ -10290,13 +13666,14 @@ LOAD_IP(frame->return_offset); res = temp; LLTRACE_RESUME_FRAME(); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(SEND) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = SEND; (void)(opcode); @@ -10312,15 +13689,29 @@ _PyStackRef retval; // _SPECIALIZE_SEND { - receiver = stack_pointer[-2]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + receiver = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['receiver'ML, '_tos'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['receiver'ML, '_tos'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML, '_tos'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_Send(receiver, next_instr); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML]; base=-1; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(SEND); @@ -10329,7 +13720,8 @@ } // _SEND { - v = stack_pointer[-1]; + /* Variables=['receiver'ML, '_tos'L]; base=-1; sp=0; logical_sp=1 */ + v = _tos; PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); PyObject *retval_o; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); @@ -10339,7 +13731,6 @@ { PyGenObject *gen = (PyGenObject *)receiver_o; _PyInterpreterFrame *gen_frame = &gen->gi_iframe; - STACK_SHRINK(1); _PyFrame_StackPush(gen_frame, PyStackRef_MakeHeapSafe(v)); gen->gi_frame_state = FRAME_EXECUTING; gen->gi_exc_state.previous_item = tstate->exc_info; @@ -10351,11 +13742,23 @@ DISPATCH_INLINED(gen_frame); } if (PyStackRef_IsNone(v) && PyIter_Check(receiver_o)) { + /* Variables=['receiver'ML, 'v'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = v; + /* Variables=['receiver'ML, 'v'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML, 'v'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); retval_o = Py_TYPE(receiver_o)->tp_iternext(receiver_o); stack_pointer = _PyFrame_GetStackPointer(frame); } else { + /* Variables=['receiver'ML, 'v'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = v; + /* Variables=['receiver'ML, 'v'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML, 'v'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); retval_o = PyObject_CallMethodOneArg(receiver_o, &_Py_ID(send), @@ -10381,6 +13784,7 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10389,18 +13793,20 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); retval = PyStackRef_FromPyObjectSteal(retval_o); } - stack_pointer[0] = retval; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = retval; + _tos = _tmp; DISPATCH(); } TARGET(SEND_GEN) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = SEND_GEN; (void)(opcode); @@ -10418,7 +13824,11 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ if (tstate->interp->eval_frame) { + _PyStackRef _tmp; + _tmp = _tos; + _tos = _tmp; UPDATE_MISS_STATS(SEND); assert(_PyOpcode_Deopt[opcode] == (SEND)); JUMP_TO_PREDICTED(SEND); @@ -10426,15 +13836,23 @@ } // _SEND_GEN_FRAME { - v = stack_pointer[-1]; - receiver = stack_pointer[-2]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + v = _tos; + receiver = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { + _PyStackRef _tmp; + _tmp = v; + _tos = _tmp; UPDATE_MISS_STATS(SEND); assert(_PyOpcode_Deopt[opcode] == (SEND)); JUMP_TO_PREDICTED(SEND); } if (gen->gi_frame_state >= FRAME_EXECUTING) { + _PyStackRef _tmp; + _tmp = v; + _tos = _tmp; UPDATE_MISS_STATS(SEND); assert(_PyOpcode_Deopt[opcode] == (SEND)); JUMP_TO_PREDICTED(SEND); @@ -10451,11 +13869,10 @@ } // _PUSH_FRAME { + /* Variables=['receiver'ML, 'gen_frame'L]; base=-1; sp=0; logical_sp=1 */ new_frame = gen_frame; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -10465,10 +13882,18 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(SETUP_ANNOTATIONS) { + assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = SETUP_ANNOTATIONS; (void)(opcode); @@ -10478,12 +13903,24 @@ INSTRUCTION_STATS(SETUP_ANNOTATIONS); PyObject *ann_dict; if (LOCALS() == NULL) { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_SystemError, "no locals found when setting up annotations"); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(LOCALS(), &_Py_ID(__annotations__), &ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10511,10 +13948,17 @@ Py_DECREF(ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); } + _PyStackRef _tmp; + _tmp = _tos; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(SET_ADD) { + assert(STACK_LEVEL() - 2 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = SET_ADD; (void)(opcode); @@ -10524,8 +13968,15 @@ INSTRUCTION_STATS(SET_ADD); _PyStackRef set; _PyStackRef v; - v = stack_pointer[-1]; - set = stack_pointer[-2 - (oparg-1)]; + v = _tos; + set = stack_pointer[-1 - (oparg-1)]; + /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ + /* Variables=['set'ML, 'unused'MA, 'v'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ + stack_pointer[0] = v; + /* Variables=['set'ML, 'unused'MA, 'v'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set'ML, 'unused'MA, 'v'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_AddTakeRef((PySetObject *)PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectSteal(v)); @@ -10533,12 +13984,21 @@ if (err) { JUMP_TO_LABEL(pop_1_error); } + _PyStackRef _tmp; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set'ML, 'unused'MA]; base=-1 - (oparg-1); sp=0; logical_sp=0 */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(SET_FUNCTION_ATTRIBUTE) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = SET_FUNCTION_ATTRIBUTE; (void)(opcode); @@ -10549,8 +14009,9 @@ _PyStackRef attr_st; _PyStackRef func_in; _PyStackRef func_out; - func_in = stack_pointer[-1]; - attr_st = stack_pointer[-2]; + func_in = _tos; + attr_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); func_out = func_in; @@ -10560,13 +14021,17 @@ PyObject **ptr = (PyObject **)(((char *)func) + offset); assert(*ptr == NULL); *ptr = attr; - stack_pointer[-2] = func_out; + _PyStackRef _tmp; + _tmp = func_out; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(SET_UPDATE) { + assert(STACK_LEVEL() - 2 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = SET_UPDATE; (void)(opcode); @@ -10576,24 +14041,40 @@ INSTRUCTION_STATS(SET_UPDATE); _PyStackRef set; _PyStackRef iterable; - iterable = stack_pointer[-1]; - set = stack_pointer[-2 - (oparg-1)]; + iterable = _tos; + set = stack_pointer[-1 - (oparg-1)]; + /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ + /* Variables=['set'ML, 'unused'MA, 'iterable'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ + stack_pointer[0] = iterable; + /* Variables=['set'ML, 'unused'MA, 'iterable'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set'ML, 'unused'MA, 'iterable'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_Update(PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set'ML, 'unused'MA]; base=-1 - (oparg-1); sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_ATTR) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_ATTR; (void)(opcode); @@ -10608,16 +14089,29 @@ _PyStackRef v; // _SPECIALIZE_STORE_ATTR { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); next_instr = this_instr; + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_StoreAttr(owner, next_instr, name); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = owner; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(STORE_ATTR); @@ -10627,30 +14121,51 @@ /* Skip 3 cache entries */ // _STORE_ATTR { - v = stack_pointer[-2]; + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + /* Variables=['v'ML, 'owner'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['v'ML, 'owner'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetAttr(PyStackRef_AsPyObjectBorrow(owner), name, PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = owner; owner = PyStackRef_NULL; + /* Variables=['v'ML, 'owner'L]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-1] = owner; + /* Variables=['v'ML, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; + /* Variables=['v'L, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ stack_pointer[-2] = v; + /* Variables=['v'ML, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (err) { JUMP_TO_LABEL(error); } } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_ATTR_INSTANCE_VALUE) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_ATTR_INSTANCE_VALUE; (void)(opcode); @@ -10666,11 +14181,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION_AND_LOCK { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10679,6 +14198,9 @@ if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10687,6 +14209,7 @@ } // _GUARD_DORV_NO_DICT { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); @@ -10694,6 +14217,9 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10702,7 +14228,9 @@ } // _STORE_ATTR_INSTANCE_VALUE { - value = stack_pointer[-2]; + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t offset = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); STAT_INC(STORE_ATTR, hit); @@ -10716,17 +14244,26 @@ _PyDictValues_AddToInsertionOrder(values, index); } UNLOCK_OBJECT(owner_o); - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_ATTR_SLOT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_ATTR_SLOT; (void)(opcode); @@ -10742,11 +14279,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10754,10 +14295,15 @@ } // _STORE_ATTR_SLOT { - value = stack_pointer[-2]; + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t index = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!LOCK_OBJECT(owner_o)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10767,17 +14313,26 @@ PyObject *old_value = *(PyObject **)addr; FT_ATOMIC_STORE_PTR_RELEASE(*(PyObject **)addr, PyStackRef_AsPyObjectSteal(value)); UNLOCK_OBJECT(owner_o); - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_ATTR_WITH_HINT) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_ATTR_WITH_HINT; (void)(opcode); @@ -10793,11 +14348,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10805,17 +14364,25 @@ } // _STORE_ATTR_WITH_HINT { - value = stack_pointer[-2]; + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t hint = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); PyDictObject *dict = _PyObject_GetManagedDict(owner_o); if (dict == NULL) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); } if (!LOCK_OBJECT(dict)) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10824,6 +14391,9 @@ if (dict != _PyObject_GetManagedDict(owner_o)) { UNLOCK_OBJECT(dict); if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10836,6 +14406,9 @@ !DK_IS_UNICODE(dict->ma_keys)) { UNLOCK_OBJECT(dict); if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10845,6 +14418,9 @@ if (ep->me_key != name) { UNLOCK_OBJECT(dict); if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -10854,11 +14430,20 @@ if (old_value == NULL) { UNLOCK_OBJECT(dict); if (true) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); } } + /* Variables=['value'ML, 'owner'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = owner; + /* Variables=['value'ML, 'owner'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyDict_NotifyEvent(tstate->interp, PyDict_EVENT_MODIFIED, dict, name, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10867,15 +14452,24 @@ STAT_INC(STORE_ATTR, hit); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_DEREF) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_DEREF; (void)(opcode); @@ -10884,17 +14478,29 @@ next_instr += 1; INSTRUCTION_STATS(STORE_DEREF); _PyStackRef v; - v = stack_pointer[-1]; + v = _tos; PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); + /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = v; + /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v)); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; + _PyStackRef _tmp; + _tmp = stack_pointer[-2]; + /* Variables=[]; base=-1; sp=1; logical_sp=-1 */ + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_FAST) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_FAST; (void)(opcode); @@ -10903,22 +14509,28 @@ next_instr += 1; INSTRUCTION_STATS(STORE_FAST); _PyStackRef value; - value = stack_pointer[-1]; + value = _tos; assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) ); _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_FAST_LOAD_FAST) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_FAST_LOAD_FAST; (void)(opcode); @@ -10928,7 +14540,7 @@ INSTRUCTION_STATS(STORE_FAST_LOAD_FAST); _PyStackRef value1; _PyStackRef value2; - value1 = stack_pointer[-1]; + value1 = _tos; assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value1) @@ -10938,14 +14550,26 @@ _PyStackRef tmp = GETLOCAL(oparg1); GETLOCAL(oparg1) = value1; value2 = PyStackRef_DUP(GETLOCAL(oparg2)); - stack_pointer[-1] = value2; + /* Variables=['value2'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value2; + /* Variables=['value2'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value2'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = value2; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_FAST_STORE_FAST) { + assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_FAST_STORE_FAST; (void)(opcode); @@ -10955,8 +14579,9 @@ INSTRUCTION_STATS(STORE_FAST_STORE_FAST); _PyStackRef value2; _PyStackRef value1; - value1 = stack_pointer[-1]; - value2 = stack_pointer[-2]; + value1 = _tos; + value2 = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value1) @@ -10969,8 +14594,6 @@ uint32_t oparg2 = oparg & 15; _PyStackRef tmp = GETLOCAL(oparg1); GETLOCAL(oparg1) = value1; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10978,13 +14601,22 @@ GETLOCAL(oparg2) = value2; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_GLOBAL) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_GLOBAL; (void)(opcode); @@ -10993,23 +14625,38 @@ next_instr += 1; INSTRUCTION_STATS(STORE_GLOBAL); _PyStackRef v; - v = stack_pointer[-1]; + v = _tos; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = v; + /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_SetItem(GLOBALS(), name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_NAME) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_NAME; (void)(opcode); @@ -11018,44 +14665,72 @@ next_instr += 1; INSTRUCTION_STATS(STORE_NAME); _PyStackRef v; - v = stack_pointer[-1]; + v = _tos; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); int err; if (ns == NULL) { + /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = v; + /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_SystemError, "no locals found when storing %R", name); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } if (PyDict_CheckExact(ns)) { + /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = v; + /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyDict_SetItem(ns, name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); } else { + /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = v; + /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_SetItem(ns, name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_SLICE) { + assert(STACK_LEVEL() - 4 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_SLICE; (void)(opcode); @@ -11069,16 +14744,24 @@ _PyStackRef stop; // _SPECIALIZE_STORE_SLICE { + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ #if ENABLE_SPECIALIZATION OPCODE_DEFERRED_INC(STORE_SLICE); #endif /* ENABLE_SPECIALIZATION */ } // _STORE_SLICE { - stop = stack_pointer[-1]; - start = stack_pointer[-2]; - container = stack_pointer[-3]; - v = stack_pointer[-4]; + /* Variables=['v'M, 'container'M, 'start'M, '_tos'L]; base=-3; sp=0; logical_sp=1 */ + stop = _tos; + start = stack_pointer[-1]; + container = stack_pointer[-2]; + v = stack_pointer[-3]; + /* Variables=['v'ML, 'container'ML, 'start'ML, 'stop'L]; base=-3; sp=0; logical_sp=1 */ + stack_pointer[0] = stop; + /* Variables=['v'ML, 'container'ML, 'start'ML, 'stop'ML]; base=-3; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML, 'container'ML, 'start'ML, 'stop'ML]; base=-3; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -11090,35 +14773,46 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML, 'container'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), slice, PyStackRef_AsPyObjectBorrow(v)); Py_DECREF(slice); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); } - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = container; container = PyStackRef_NULL; - stack_pointer[-1] = container; + /* Variables=['v'ML, 'container'L]; base=-3; sp=1; logical_sp=-1 */ + stack_pointer[-3] = container; + /* Variables=['v'ML, 'container'ML]; base=-3; sp=1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - stack_pointer[-2] = v; + /* Variables=['v'L, 'container'ML]; base=-3; sp=1; logical_sp=-1 */ + stack_pointer[-4] = v; + /* Variables=['v'ML, 'container'ML]; base=-3; sp=1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -2; + stack_pointer += -4; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (err) { JUMP_TO_LABEL(error); } } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-4; sp=-3; logical_sp=-4 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_SUBSCR) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_SUBSCR; (void)(opcode); @@ -11134,16 +14828,30 @@ _PyStackRef v; // _SPECIALIZE_STORE_SUBSCR { - sub = stack_pointer[-1]; - container = stack_pointer[-2]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + sub = _tos; + container = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['container'ML, 'sub'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = sub; + /* Variables=['container'ML, 'sub'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['container'ML, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_StoreSubscr(container, sub, next_instr); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = sub; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['container'ML]; base=-1; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(STORE_SUBSCR); @@ -11152,32 +14860,55 @@ } // _STORE_SUBSCR { - v = stack_pointer[-3]; + /* Variables=['container'ML, 'sub'L]; base=-1; sp=0; logical_sp=1 */ + v = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + /* Variables=['v'ML, 'container'ML, 'sub'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = sub; + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub), PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; + /* Variables=['v'ML, 'container'ML, 'sub'L]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-1] = sub; + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; + /* Variables=['v'ML, 'container'L, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-2] = container; + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; + /* Variables=['v'L, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ stack_pointer[-3] = v; + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (err) { JUMP_TO_LABEL(error); } } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-3; sp=-2; logical_sp=-3 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_SUBSCR_DICT) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_SUBSCR_DICT; (void)(opcode); @@ -11192,16 +14923,27 @@ _PyStackRef dict_st; _PyStackRef sub; /* Skip 1 cache entry */ - sub = stack_pointer[-1]; - dict_st = stack_pointer[-2]; - value = stack_pointer[-3]; + sub = _tos; + dict_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { + _PyStackRef _tmp; + _tmp = sub; + _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); } STAT_INC(STORE_SUBSCR, hit); + /* Variables=['value'ML, 'dict_st'ML, 'sub'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = sub; + /* Variables=['value'ML, 'dict_st'ML, 'sub'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML, 'dict_st'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_SetItem_Take2((PyDictObject *)dict, PyStackRef_AsPyObjectSteal(sub), @@ -11209,16 +14951,25 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-3; sp=-2; logical_sp=-3 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ + _tos = _tmp; DISPATCH(); } TARGET(STORE_SUBSCR_LIST_INT) { + assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_SUBSCR_LIST_INT; (void)(opcode); @@ -11234,9 +14985,13 @@ _PyStackRef sub_st; // _GUARD_TOS_INT { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); @@ -11245,24 +15000,36 @@ /* Skip 1 cache entry */ // _STORE_SUBSCR_LIST_INT { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ sub_st = value; - list_st = stack_pointer[-2]; - value = stack_pointer[-3]; + list_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); if (!PyList_CheckExact(list)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); } if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (!LOCK_OBJECT(list)) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); @@ -11270,6 +15037,9 @@ if (index >= PyList_GET_SIZE(list)) { UNLOCK_OBJECT(list); if (true) { + _PyStackRef _tmp; + _tmp = sub_st; + _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); @@ -11282,17 +15052,26 @@ assert(old_value != NULL); UNLOCK_OBJECT(list); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); - stack_pointer += -3; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(list_st); Py_DECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); } + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-3; sp=-2; logical_sp=-3 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ + _tos = _tmp; DISPATCH(); } TARGET(SWAP) { + assert(STACK_LEVEL() - 2 + (oparg-2) >= -1); #if Py_TAIL_CALL_INTERP int opcode = SWAP; (void)(opcode); @@ -11302,16 +15081,32 @@ INSTRUCTION_STATS(SWAP); _PyStackRef *bottom; _PyStackRef *top; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = _tos; + /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ top = &stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ bottom = &stack_pointer[-2 - (oparg-2)]; + /* Variables=[]; base=-1 - (oparg-2); sp=1; logical_sp=-1 - (oparg-2) */ _PyStackRef temp = bottom[0]; bottom[0] = top[0]; top[0] = temp; assert(oparg >= 2); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=0; sp=1; logical_sp=0 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(TO_BOOL) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL; (void)(opcode); @@ -11326,15 +15121,28 @@ _PyStackRef res; // _SPECIALIZE_TO_BOOL { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_ToBool(value, next_instr); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = value; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(TO_BOOL); @@ -11344,11 +15152,19 @@ /* Skip 2 cache entries */ // _TO_BOOL { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_IsTrue(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11357,13 +15173,14 @@ } res = err ? PyStackRef_True : PyStackRef_False; } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(TO_BOOL_ALWAYS_TRUE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_ALWAYS_TRUE; (void)(opcode); @@ -11380,11 +15197,15 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - owner = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + owner = _tos; uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + _PyStackRef _tmp; + _tmp = owner; + _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); @@ -11392,21 +15213,21 @@ } // _REPLACE_WITH_TRUE { + /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ value = owner; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(TO_BOOL_BOOL) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_BOOL; (void)(opcode); @@ -11420,17 +15241,24 @@ _PyStackRef value; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - value = stack_pointer[-1]; + value = _tos; if (!PyStackRef_BoolCheck(value)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); } STAT_INC(TO_BOOL, hit); + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; DISPATCH(); } TARGET(TO_BOOL_INT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_INT; (void)(opcode); @@ -11445,9 +15273,12 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - value = stack_pointer[-1]; + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); @@ -11458,20 +15289,19 @@ res = PyStackRef_False; } else { - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } - stack_pointer[-1] = res; + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(TO_BOOL_LIST) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_LIST; (void)(opcode); @@ -11486,25 +15316,43 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - value = stack_pointer[-1]; + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyList_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); } STAT_INC(TO_BOOL, hit); res = PyList_GET_SIZE(value_o) ? PyStackRef_True : PyStackRef_False; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = res; + /* Variables=['value'L]; base=0; sp=1; logical_sp=1 */ stack_pointer[-1] = value; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH(); } TARGET(TO_BOOL_NONE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_NONE; (void)(opcode); @@ -11519,19 +15367,25 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - value = stack_pointer[-1]; + value = _tos; if (!PyStackRef_IsNone(value)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); } STAT_INC(TO_BOOL, hit); res = PyStackRef_False; - stack_pointer[-1] = res; + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(TO_BOOL_STR) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_STR; (void)(opcode); @@ -11546,9 +15400,13 @@ _PyStackRef res; // _GUARD_TOS_UNICODE { - value = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + value = _tos; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); @@ -11558,6 +15416,7 @@ /* Skip 2 cache entries */ // _TO_BOOL_STR { + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ STAT_INC(TO_BOOL, hit); PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (value_o == &_Py_STR(empty)) { @@ -11566,21 +15425,20 @@ } else { assert(Py_SIZE(value_o)); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[-1] = res; + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(UNARY_INVERT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNARY_INVERT; (void)(opcode); @@ -11590,12 +15448,19 @@ INSTRUCTION_STATS(UNARY_INVERT); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + value = _tos; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Invert(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11603,13 +15468,14 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(UNARY_NEGATIVE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNARY_NEGATIVE; (void)(opcode); @@ -11619,12 +15485,19 @@ INSTRUCTION_STATS(UNARY_NEGATIVE); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + value = _tos; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Negative(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11632,13 +15505,14 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(UNARY_NOT) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNARY_NOT; (void)(opcode); @@ -11648,15 +15522,18 @@ INSTRUCTION_STATS(UNARY_NOT); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + value = _tos; assert(PyStackRef_BoolCheck(value)); res = PyStackRef_IsFalse(value) ? PyStackRef_True : PyStackRef_False; - stack_pointer[-1] = res; + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(UNPACK_EX) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_EX; (void)(opcode); @@ -11666,11 +15543,9 @@ INSTRUCTION_STATS(UNPACK_EX); _PyStackRef seq; _PyStackRef *top; - seq = stack_pointer[-1]; - top = &stack_pointer[(oparg & 0xFF) + (oparg >> 8)]; + seq = _tos; + top = &stack_pointer[1 + (oparg & 0xFF) + (oparg >> 8)]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg & 0xFF, oparg >> 8, top); Py_DECREF(seq_o); @@ -11678,12 +15553,21 @@ if (res == 0) { JUMP_TO_LABEL(error); } + _PyStackRef _tmp; stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['unused'A, 'unused', 'unused'A, 'top'A]; base=0; sp=1 + (oparg & 0xFF) + (oparg >> 8); logical_sp=1 + (oparg & 0xFF) + (oparg >> 8) */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=(oparg & 0xFF) + (oparg >> 8); sp=1 + (oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=(oparg & 0xFF) + (oparg >> 8); sp=(oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ + _tos = _tmp; DISPATCH(); } TARGET(UNPACK_SEQUENCE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_SEQUENCE; (void)(opcode); @@ -11698,15 +15582,28 @@ _PyStackRef *top; // _SPECIALIZE_UNPACK_SEQUENCE { - seq = stack_pointer[-1]; + /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + seq = _tos; uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; + /* Variables=['seq'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = seq; + /* Variables=['seq'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['seq'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_UnpackSequence(seq, next_instr, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = seq; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(UNPACK_SEQUENCE); @@ -11717,10 +15614,9 @@ } // _UNPACK_SEQUENCE { - top = &stack_pointer[-1 + oparg]; + /* Variables=['seq'L]; base=0; sp=0; logical_sp=1 */ + top = &stack_pointer[oparg]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg, -1, top); Py_DECREF(seq_o); @@ -11729,12 +15625,21 @@ JUMP_TO_LABEL(error); } } + _PyStackRef _tmp; stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['unused'A, 'top'A]; base=0; sp=oparg; logical_sp=oparg */ + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1 + oparg; sp=oparg; logical_sp=-1 + oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 + oparg; sp=-1 + oparg; logical_sp=-1 + oparg */ + _tos = _tmp; DISPATCH(); } TARGET(UNPACK_SEQUENCE_LIST) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_SEQUENCE_LIST; (void)(opcode); @@ -11748,15 +15653,21 @@ _PyStackRef seq; _PyStackRef *values; /* Skip 1 cache entry */ - seq = stack_pointer[-1]; - values = &stack_pointer[-1]; + seq = _tos; + values = &stack_pointer[0]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyList_CheckExact(seq_o)) { + _PyStackRef _tmp; + _tmp = seq; + _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); } if (!LOCK_OBJECT(seq_o)) { + _PyStackRef _tmp; + _tmp = seq; + _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); @@ -11764,6 +15675,9 @@ if (PyList_GET_SIZE(seq_o) != oparg) { UNLOCK_OBJECT(seq_o); if (true) { + _PyStackRef _tmp; + _tmp = seq; + _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); @@ -11775,15 +15689,24 @@ *values++ = PyStackRef_FromPyObjectNew(items[i]); } UNLOCK_OBJECT(seq_o); - stack_pointer += -1 + oparg; + stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'A]; base=0; sp=oparg; logical_sp=oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1 + oparg; sp=oparg; logical_sp=-1 + oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 + oparg; sp=-1 + oparg; logical_sp=-1 + oparg */ + _tos = _tmp; DISPATCH(); } TARGET(UNPACK_SEQUENCE_TUPLE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_SEQUENCE_TUPLE; (void)(opcode); @@ -11797,15 +15720,21 @@ _PyStackRef seq; _PyStackRef *values; /* Skip 1 cache entry */ - seq = stack_pointer[-1]; - values = &stack_pointer[-1]; + seq = _tos; + values = &stack_pointer[0]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { + _PyStackRef _tmp; + _tmp = seq; + _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); } if (PyTuple_GET_SIZE(seq_o) != oparg) { + _PyStackRef _tmp; + _tmp = seq; + _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); @@ -11815,15 +15744,24 @@ for (int i = oparg; --i >= 0; ) { *values++ = PyStackRef_FromPyObjectNew(items[i]); } - stack_pointer += -1 + oparg; + stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'A]; base=0; sp=oparg; logical_sp=oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1 + oparg; sp=oparg; logical_sp=-1 + oparg */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1 + oparg; sp=-1 + oparg; logical_sp=-1 + oparg */ + _tos = _tmp; DISPATCH(); } TARGET(UNPACK_SEQUENCE_TWO_TUPLE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_SEQUENCE_TWO_TUPLE; (void)(opcode); @@ -11838,15 +15776,21 @@ _PyStackRef val1; _PyStackRef val0; /* Skip 1 cache entry */ - seq = stack_pointer[-1]; + seq = _tos; assert(oparg == 2); PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { + _PyStackRef _tmp; + _tmp = seq; + _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); } if (PyTuple_GET_SIZE(seq_o) != 2) { + _PyStackRef _tmp; + _tmp = seq; + _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); @@ -11854,18 +15798,29 @@ STAT_INC(UNPACK_SEQUENCE, hit); val0 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 0)); val1 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 1)); - stack_pointer[-1] = val1; - stack_pointer[0] = val0; - stack_pointer += 1; + /* Variables=['val1'L, 'val0'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[0] = val1; + /* Variables=['val1'ML, 'val0'L]; base=0; sp=0; logical_sp=2 */ + /* Variables=['val1'ML, 'val0'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[1] = val0; + /* Variables=['val1'ML, 'val0'ML]; base=0; sp=0; logical_sp=2 */ + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val1'ML, 'val0'ML]; base=0; sp=2; logical_sp=2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer[-1] = val0; + _PyStackRef _tmp; + _tmp = val0; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val1'ML]; base=0; sp=1; logical_sp=1 */ + _tos = _tmp; DISPATCH(); } TARGET(WITH_EXCEPT_START) { + assert(STACK_LEVEL() - 5 >= -1); #if Py_TAIL_CALL_INTERP int opcode = WITH_EXCEPT_START; (void)(opcode); @@ -11878,10 +15833,13 @@ _PyStackRef lasti; _PyStackRef val; _PyStackRef res; - val = stack_pointer[-1]; - lasti = stack_pointer[-3]; - exit_self = stack_pointer[-4]; - exit_func = stack_pointer[-5]; + val = _tos; + lasti = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + exit_self = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ + exit_func = stack_pointer[-4]; + /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ PyObject *exc, *tb; PyObject *val_o = PyStackRef_AsPyObjectBorrow(val); PyObject *exit_func_o = PyStackRef_AsPyObjectBorrow(exit_func); @@ -11895,6 +15853,12 @@ (void)lasti; PyObject *stack[5] = {NULL, PyStackRef_AsPyObjectBorrow(exit_self), exc, val_o, tb}; int has_self = !PyStackRef_IsNull(exit_self); + /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'L]; base=-4; sp=0; logical_sp=1 */ + stack_pointer[0] = val; + /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML]; base=-4; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML]; base=-4; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall(exit_func_o, stack + 2 - has_self, (3 + has_self) | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); @@ -11904,13 +15868,14 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = res; + _tos = _tmp; DISPATCH(); } TARGET(YIELD_VALUE) { + assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = YIELD_VALUE; (void)(opcode); @@ -11920,7 +15885,7 @@ INSTRUCTION_STATS(YIELD_VALUE); _PyStackRef retval; _PyStackRef value; - retval = stack_pointer[-1]; + retval = _tos; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); frame->instr_ptr++; PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); @@ -11928,8 +15893,6 @@ assert(oparg == 0 || oparg == 1); gen->gi_frame_state = FRAME_SUSPENDED + oparg; _PyStackRef temp = retval; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); tstate->exc_info = gen->gi_exc_state.previous_item; gen->gi_exc_state.previous_item = NULL; @@ -11950,9 +15913,9 @@ LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _tmp; + _tmp = value; + _tos = _tmp; DISPATCH(); } @@ -12081,6 +16044,13 @@ JUMP_TO_LABEL(error); #if Py_TAIL_CALL_INTERP int opcode; #endif + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } @@ -12121,6 +16091,13 @@ JUMP_TO_LABEL(error); #if Py_TAIL_CALL_INTERP int opcode; #endif + _PyStackRef _tmp; + _tmp = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + _tos = _tmp; DISPATCH(); } diff --git a/Python/optimizer_analysis.c b/Python/optimizer_analysis.c index ab28fae94a96a9..8d6f32be1f7528 100644 --- a/Python/optimizer_analysis.c +++ b/Python/optimizer_analysis.c @@ -306,7 +306,7 @@ remove_globals(_PyInterpreterFrame *frame, _PyUOpInstruction *buffer, #define STACK_LEVEL() ((int)(stack_pointer - ctx->frame->stack)) #define STACK_SIZE() ((int)(ctx->frame->stack_len)) -#define WITHIN_STACK_BOUNDS() \ +#define WITHIN_STACK_BOUNDS(OFFSET) \ (STACK_LEVEL() >= 0 && STACK_LEVEL() <= STACK_SIZE()) diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index ea25b8224a459b..f240fc58039985 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -31,27 +31,36 @@ if (sym_is_null(value)) { ctx->done = true; } + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _LOAD_FAST: { JitOptSymbol *value; value = GETLOCAL(oparg); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _LOAD_FAST_BORROW: { JitOptSymbol *value; value = GETLOCAL(oparg); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -60,9 +69,12 @@ value = GETLOCAL(oparg); JitOptSymbol *temp = sym_new_null(ctx); GETLOCAL(oparg) = temp; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -74,9 +86,12 @@ int opcode = _Py_IsImmortal(val) ? _LOAD_CONST_INLINE_BORROW : _LOAD_CONST_INLINE; REPLACE_OP(this_instr, opcode, 0, (uintptr_t)val); value = sym_new_const(ctx, val); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -85,9 +100,12 @@ PyObject *val = PyTuple_GET_ITEM(co->co_consts, this_instr->oparg); REPLACE_OP(this_instr, _LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)val); value = sym_new_const(ctx, val); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -95,55 +113,70 @@ JitOptSymbol *value; PyObject *val = PyLong_FromLong(this_instr->oparg); value = sym_new_const(ctx, val); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _STORE_FAST: { JitOptSymbol *value; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _POP_TOP: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _PUSH_NULL: { JitOptSymbol *res; res = sym_new_null(ctx); + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } case _END_FOR: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _END_SEND: { JitOptSymbol *val; val = sym_new_not_null(ctx); + /* Variables=['val'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = val; + /* Variables=['val'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _UNARY_NEGATIVE: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -151,9 +184,12 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ sym_set_type(value, &PyBool_Type); res = sym_new_truthiness(ctx, value, false); + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -161,11 +197,14 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { res = sym_new_truthiness(ctx, value, true); } + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -173,12 +212,15 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { sym_set_type(value, &PyBool_Type); res = sym_new_truthiness(ctx, value, true); } + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -186,12 +228,15 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { sym_set_type(value, &PyLong_Type); res = sym_new_truthiness(ctx, value, true); } + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -199,12 +244,15 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { sym_set_type(value, &PyList_Type); res = sym_new_type(ctx, &PyBool_Type); } + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -212,18 +260,22 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { sym_set_const(value, Py_None); res = sym_new_const(ctx, Py_False); } + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GUARD_NOS_UNICODE: { JitOptSymbol *nos; nos = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_matches_type(nos, &PyUnicode_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -234,6 +286,7 @@ case _GUARD_TOS_UNICODE: { JitOptSymbol *value; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_matches_type(value, &PyUnicode_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -245,31 +298,39 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { res = sym_new_truthiness(ctx, value, true); } + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _REPLACE_WITH_TRUE: { JitOptSymbol *res; res = sym_new_const(ctx, Py_True); + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _UNARY_INVERT: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GUARD_NOS_INT: { JitOptSymbol *nos; nos = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_matches_type(nos, &PyLong_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -280,6 +341,7 @@ case _GUARD_TOS_INT: { JitOptSymbol *tos; tos = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_matches_type(tos, &PyLong_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -292,7 +354,9 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyLong_CheckExact(sym_get_const(ctx, left))); assert(PyLong_CheckExact(sym_get_const(ctx, right))); @@ -302,17 +366,21 @@ goto error; } res = sym_new_const(ctx, temp); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyLong_Type); stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -321,7 +389,9 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyLong_CheckExact(sym_get_const(ctx, left))); assert(PyLong_CheckExact(sym_get_const(ctx, right))); @@ -331,17 +401,21 @@ goto error; } res = sym_new_const(ctx, temp); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyLong_Type); stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -350,7 +424,9 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyLong_CheckExact(sym_get_const(ctx, left))); assert(PyLong_CheckExact(sym_get_const(ctx, right))); @@ -360,23 +436,28 @@ goto error; } res = sym_new_const(ctx, temp); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyLong_Type); stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _GUARD_NOS_FLOAT: { JitOptSymbol *nos; nos = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_matches_type(nos, &PyFloat_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -387,6 +468,7 @@ case _GUARD_TOS_FLOAT: { JitOptSymbol *tos; tos = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_matches_type(tos, &PyFloat_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -399,7 +481,9 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyFloat_CheckExact(sym_get_const(ctx, left))); assert(PyFloat_CheckExact(sym_get_const(ctx, right))); @@ -410,17 +494,21 @@ goto error; } res = sym_new_const(ctx, temp); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyFloat_Type); stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -429,7 +517,9 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyFloat_CheckExact(sym_get_const(ctx, left))); assert(PyFloat_CheckExact(sym_get_const(ctx, right))); @@ -440,17 +530,21 @@ goto error; } res = sym_new_const(ctx, temp); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyFloat_Type); stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -459,7 +553,9 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyFloat_CheckExact(sym_get_const(ctx, left))); assert(PyFloat_CheckExact(sym_get_const(ctx, right))); @@ -470,17 +566,21 @@ goto error; } res = sym_new_const(ctx, temp); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyFloat_Type); stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -489,7 +589,9 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyUnicode_CheckExact(sym_get_const(ctx, left))); assert(PyUnicode_CheckExact(sym_get_const(ctx, right))); @@ -498,17 +600,21 @@ goto error; } res = sym_new_const(ctx, temp); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyUnicode_Type); stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -516,7 +622,9 @@ JitOptSymbol *right; JitOptSymbol *left; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ JitOptSymbol *res; if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyUnicode_CheckExact(sym_get_const(ctx, left))); @@ -534,6 +642,7 @@ GETLOCAL(this_instr->operand0) = res; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } @@ -544,69 +653,91 @@ case _BINARY_OP_EXTEND: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_SLICE: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; + /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _STORE_SLICE: { stack_pointer += -4; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ break; } case _BINARY_OP_SUBSCR_LIST_INT: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_OP_SUBSCR_STR_INT: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_OP_SUBSCR_TUPLE_INT: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_OP_SUBSCR_DICT: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_OP_SUBSCR_CHECK_FUNC: { JitOptSymbol *getitem; getitem = sym_new_not_null(ctx); + /* Variables=['container', 'unused', 'getitem'L]; base=-2; sp=0; logical_sp=1 */ stack_pointer[0] = getitem; + /* Variables=['container', 'unused', 'getitem'ML]; base=-2; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['container', 'unused', 'getitem'ML]; base=-2; sp=1; logical_sp=1 */ break; } @@ -614,61 +745,75 @@ _Py_UOpsAbstractFrame *new_frame; new_frame = NULL; ctx->done = true; + /* Variables=['new_frame'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = (JitOptSymbol *)new_frame; + /* Variables=['new_frame'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _LIST_APPEND: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list', 'unused'A]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } case _SET_ADD: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set', 'unused'A]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } case _STORE_SUBSCR: { stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ break; } case _STORE_SUBSCR_LIST_INT: { stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ break; } case _STORE_SUBSCR_DICT: { stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ break; } case _DELETE_SUBSCR: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } case _CALL_INTRINSIC_1: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _CALL_INTRINSIC_2: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -676,9 +821,11 @@ JitOptSymbol *retval; JitOptSymbol *res; retval = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ JitOptSymbol *temp = retval; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ ctx->frame->stack_pointer = stack_pointer; frame_pop(ctx); stack_pointer = ctx->frame->stack_pointer; @@ -693,32 +840,42 @@ ctx->done = true; } res = temp; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GET_AITER: { JitOptSymbol *iter; iter = sym_new_not_null(ctx); + /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GET_ANEXT: { JitOptSymbol *awaitable; awaitable = sym_new_not_null(ctx); + /* Variables=['aiter', 'awaitable'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = awaitable; + /* Variables=['aiter', 'awaitable'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['aiter', 'awaitable'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _GET_AWAITABLE: { JitOptSymbol *iter; iter = sym_new_not_null(ctx); + /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -732,37 +889,47 @@ case _YIELD_VALUE: { JitOptSymbol *res; res = sym_new_unknown(ctx); + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _POP_EXCEPT: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _LOAD_COMMON_CONSTANT: { JitOptSymbol *value; value = sym_new_not_null(ctx); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _LOAD_BUILD_CLASS: { JitOptSymbol *bc; bc = sym_new_not_null(ctx); + /* Variables=['bc'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = bc; + /* Variables=['bc'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['bc'ML]; base=0; sp=1; logical_sp=1 */ break; } case _STORE_NAME: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -778,6 +945,7 @@ } stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ break; } @@ -786,12 +954,18 @@ JitOptSymbol *val1; JitOptSymbol *val0; seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ val0 = sym_tuple_getitem(ctx, seq, 0); val1 = sym_tuple_getitem(ctx, seq, 1); + /* Variables=['val1'L, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = val1; + /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = val0; + /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -799,12 +973,14 @@ JitOptSymbol *seq; JitOptSymbol **values; seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ values = &stack_pointer[-1]; for (int i = 0; i < oparg; i++) { values[i] = sym_tuple_getitem(ctx, seq, i); } stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ break; } @@ -816,6 +992,7 @@ } stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'LA]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ break; } @@ -828,24 +1005,28 @@ } stack_pointer += (oparg & 0xFF) + (oparg >> 8); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'A, 'unused', 'unused'A]; base=-1; sp=(oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ break; } case _STORE_ATTR: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } case _DELETE_ATTR: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _STORE_GLOBAL: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -856,9 +1037,12 @@ case _LOAD_LOCALS: { JitOptSymbol *locals; locals = sym_new_not_null(ctx); + /* Variables=['locals'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = locals; + /* Variables=['locals'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['locals'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -867,9 +1051,12 @@ case _LOAD_NAME: { JitOptSymbol *v; v = sym_new_not_null(ctx); + /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = v; + /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -879,6 +1066,7 @@ res[0] = sym_new_not_null(ctx); stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'LA]; base=0; sp=1; logical_sp=1 */ break; } @@ -894,6 +1082,7 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['null'A]; base=0; sp=(oparg & 1); logical_sp=(oparg & 1) */ break; } @@ -904,18 +1093,24 @@ case _LOAD_GLOBAL_MODULE: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } case _LOAD_GLOBAL_BUILTINS: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -934,22 +1129,28 @@ case _LOAD_FROM_DICT_OR_DEREF: { JitOptSymbol *value; value = sym_new_not_null(ctx); + /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _LOAD_DEREF: { JitOptSymbol *value; value = sym_new_not_null(ctx); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _STORE_DEREF: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -960,9 +1161,12 @@ case _BUILD_STRING: { JitOptSymbol *str; str = sym_new_not_null(ctx); + /* Variables=['str'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = str; + /* Variables=['str'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['str'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -970,49 +1174,64 @@ JitOptSymbol **values; JitOptSymbol *tup; values = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ tup = sym_new_tuple(ctx, oparg, values); + /* Variables=['tup'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = tup; + /* Variables=['tup'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['tup'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } case _BUILD_LIST: { JitOptSymbol *list; list = sym_new_not_null(ctx); + /* Variables=['list'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = list; + /* Variables=['list'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } case _LIST_EXTEND: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['list_st', 'unused'A]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } case _SET_UPDATE: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set', 'unused'A]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } case _BUILD_SET: { JitOptSymbol *set; set = sym_new_not_null(ctx); + /* Variables=['set'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = set; + /* Variables=['set'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['set'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } case _BUILD_MAP: { JitOptSymbol *map; map = sym_new_not_null(ctx); + /* Variables=['map'L]; base=-oparg*2; sp=0; logical_sp=1 - oparg*2 */ stack_pointer[-oparg*2] = map; + /* Variables=['map'ML]; base=-oparg*2; sp=0; logical_sp=1 - oparg*2 */ stack_pointer += 1 - oparg*2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['map'ML]; base=-oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ break; } @@ -1023,27 +1242,33 @@ case _DICT_UPDATE: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict', 'unused'A]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ break; } case _DICT_MERGE: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['callable', 'unused', 'unused', 'dict', 'unused'A]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ break; } case _MAP_ADD: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['dict_st', 'unused'A]; base=-3 - (oparg - 1); sp=-2; logical_sp=-2 */ break; } case _LOAD_SUPER_ATTR_ATTR: { JitOptSymbol *attr_st; attr_st = sym_new_not_null(ctx); + /* Variables=['attr_st'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = attr_st; + /* Variables=['attr_st'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr_st'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -1052,10 +1277,15 @@ JitOptSymbol *self_or_null; attr = sym_new_not_null(ctx); self_or_null = sym_new_not_null(ctx); + /* Variables=['attr'L, 'self_or_null'L]; base=-3; sp=0; logical_sp=-1 */ stack_pointer[-3] = attr; + /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=0; logical_sp=-1 */ + /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=0; logical_sp=-1 */ stack_pointer[-2] = self_or_null; + /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-1; logical_sp=-1 */ break; } @@ -1064,21 +1294,26 @@ JitOptSymbol *attr; JitOptSymbol **self_or_null; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ self_or_null = &stack_pointer[0]; (void)owner; attr = sym_new_not_null(ctx); if (oparg &1) { self_or_null[0] = sym_new_unknown(ctx); } + /* Variables=['attr'L, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer += (oparg&1); assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=(oparg&1); logical_sp=(oparg&1) */ break; } case _GUARD_TYPE_VERSION: { JitOptSymbol *owner; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = (uint32_t)this_instr->operand0; assert(type_version); if (sym_matches_type_version(owner, type_version)) { @@ -1108,7 +1343,9 @@ uint16_t offset = (uint16_t)this_instr->operand0; attr = sym_new_not_null(ctx); (void)offset; + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1116,6 +1353,7 @@ JitOptSymbol *owner; JitOptSymbol *attr; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t dict_version = (uint32_t)this_instr->operand0; uint16_t index = (uint16_t)this_instr->operand0; (void)dict_version; @@ -1125,7 +1363,9 @@ PyModuleObject *mod = (PyModuleObject *)sym_get_const(ctx, owner); if (PyModule_CheckExact(mod)) { PyObject *dict = mod->md_dict; + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ uint64_t watched_mutations = get_mutations(dict); if (watched_mutations < _Py_MAX_ALLOWED_GLOBALS_MODIFICATIONS) { PyDict_Watch(GLOBALS_WATCHER_ID, dict); @@ -1138,7 +1378,9 @@ if (attr == NULL) { attr = sym_new_not_null(ctx); } + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1147,7 +1389,9 @@ uint16_t hint = (uint16_t)this_instr->operand0; attr = sym_new_not_null(ctx); (void)hint; + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1156,7 +1400,9 @@ uint16_t index = (uint16_t)this_instr->operand0; attr = sym_new_not_null(ctx); (void)index; + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1169,7 +1415,9 @@ PyObject *descr = (PyObject *)this_instr->operand0; attr = sym_new_not_null(ctx); (void)descr; + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1179,7 +1427,9 @@ (void)fget; new_frame = NULL; ctx->done = true; + /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = (JitOptSymbol *)new_frame; + /* Variables=['new_frame'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1192,18 +1442,21 @@ case _STORE_ATTR_INSTANCE_VALUE: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } case _STORE_ATTR_WITH_HINT: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } case _STORE_ATTR_SLOT: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } @@ -1215,18 +1468,24 @@ else { res = _Py_uop_sym_new_not_null(ctx); } + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _COMPARE_OP_FLOAT: { JitOptSymbol *res; res = sym_new_type(ctx, &PyBool_Type); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1235,7 +1494,9 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyLong_CheckExact(sym_get_const(ctx, left))); assert(PyLong_CheckExact(sym_get_const(ctx, right))); @@ -1249,62 +1510,81 @@ assert(_Py_IsImmortal(tmp)); REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)tmp); res = sym_new_const(ctx, tmp); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(tmp); } else { res = sym_new_type(ctx, &PyBool_Type); stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } + /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _COMPARE_OP_STR: { JitOptSymbol *res; res = sym_new_type(ctx, &PyBool_Type); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _IS_OP: { JitOptSymbol *res; res = sym_new_type(ctx, &PyBool_Type); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _CONTAINS_OP: { JitOptSymbol *res; res = sym_new_type(ctx, &PyBool_Type); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _CONTAINS_OP_SET: { JitOptSymbol *b; b = sym_new_not_null(ctx); + /* Variables=['b'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = b; + /* Variables=['b'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _CONTAINS_OP_DICT: { JitOptSymbol *b; b = sym_new_not_null(ctx); + /* Variables=['b'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = b; + /* Variables=['b'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1313,33 +1593,45 @@ JitOptSymbol *match; rest = sym_new_not_null(ctx); match = sym_new_not_null(ctx); + /* Variables=['rest'L, 'match'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = rest; + /* Variables=['rest'ML, 'match'L]; base=-2; sp=0; logical_sp=0 */ + /* Variables=['rest'ML, 'match'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match; + /* Variables=['rest'ML, 'match'ML]; base=-2; sp=0; logical_sp=0 */ break; } case _CHECK_EXC_MATCH: { JitOptSymbol *b; b = sym_new_not_null(ctx); + /* Variables=['left', 'b'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = b; + /* Variables=['left', 'b'ML]; base=-2; sp=0; logical_sp=0 */ break; } case _IMPORT_NAME: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _IMPORT_FROM: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['from', 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['from', 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['from', 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1350,66 +1642,87 @@ case _IS_NONE: { JitOptSymbol *b; b = sym_new_not_null(ctx); + /* Variables=['b'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = b; + /* Variables=['b'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GET_LEN: { JitOptSymbol *len; len = sym_new_not_null(ctx); + /* Variables=['obj', 'len'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = len; + /* Variables=['obj', 'len'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['obj', 'len'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _MATCH_CLASS: { JitOptSymbol *attrs; attrs = sym_new_not_null(ctx); + /* Variables=['attrs'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = attrs; + /* Variables=['attrs'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attrs'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _MATCH_MAPPING: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['subject', 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['subject', 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject', 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _MATCH_SEQUENCE: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['subject', 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['subject', 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject', 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _MATCH_KEYS: { JitOptSymbol *values_or_none; values_or_none = sym_new_not_null(ctx); + /* Variables=['subject', 'keys', 'values_or_none'L]; base=-2; sp=0; logical_sp=1 */ stack_pointer[0] = values_or_none; + /* Variables=['subject', 'keys', 'values_or_none'ML]; base=-2; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject', 'keys', 'values_or_none'ML]; base=-2; sp=1; logical_sp=1 */ break; } case _GET_ITER: { JitOptSymbol *iter; iter = sym_new_not_null(ctx); + /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GET_YIELD_FROM_ITER: { JitOptSymbol *iter; iter = sym_new_not_null(ctx); + /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1418,9 +1731,12 @@ case _FOR_ITER_TIER_TWO: { JitOptSymbol *next; next = sym_new_not_null(ctx); + /* Variables=['iter', 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; + /* Variables=['iter', 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter', 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1441,9 +1757,12 @@ case _ITER_NEXT_LIST_TIER_TWO: { JitOptSymbol *next; next = sym_new_not_null(ctx); + /* Variables=['iter', 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; + /* Variables=['iter', 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter', 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1460,9 +1779,12 @@ case _ITER_NEXT_TUPLE: { JitOptSymbol *next; next = sym_new_not_null(ctx); + /* Variables=['iter', 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; + /* Variables=['iter', 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter', 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1479,9 +1801,12 @@ case _ITER_NEXT_RANGE: { JitOptSymbol *next; next = sym_new_type(ctx, &PyLong_Type); + /* Variables=['iter'M, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; + /* Variables=['iter'M, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'M, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1495,19 +1820,27 @@ JitOptSymbol *self_or_null; attr = sym_new_not_null(ctx); self_or_null = sym_new_unknown(ctx); + /* Variables=['attr'L, 'self_or_null'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self_or_null; + /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _WITH_EXCEPT_START: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['exit_func', 'exit_self', 'lasti', 'unused', 'val', 'res'L]; base=-5; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['exit_func', 'exit_self', 'lasti', 'unused', 'val', 'res'ML]; base=-5; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['exit_func', 'exit_self', 'lasti', 'unused', 'val', 'res'ML]; base=-5; sp=1; logical_sp=1 */ break; } @@ -1516,10 +1849,15 @@ JitOptSymbol *new_exc; prev_exc = sym_new_not_null(ctx); new_exc = sym_new_not_null(ctx); + /* Variables=['prev_exc'L, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = prev_exc; + /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = new_exc; + /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1536,14 +1874,20 @@ JitOptSymbol *attr; JitOptSymbol *self; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)this_instr->operand0; (void)descr; attr = sym_new_not_null(ctx); self = owner; + /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1552,28 +1896,38 @@ JitOptSymbol *attr; JitOptSymbol *self; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)this_instr->operand0; (void)descr; attr = sym_new_not_null(ctx); self = owner; + /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES: { JitOptSymbol *attr; attr = sym_new_not_null(ctx); + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _LOAD_ATTR_NONDESCRIPTOR_NO_DICT: { JitOptSymbol *attr; attr = sym_new_not_null(ctx); + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1586,14 +1940,20 @@ JitOptSymbol *attr; JitOptSymbol *self; owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)this_instr->operand0; (void)descr; attr = sym_new_not_null(ctx); self = owner; + /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1602,12 +1962,17 @@ JitOptSymbol *func; JitOptSymbol *maybe_self; args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ args = &stack_pointer[-oparg]; (void)args; func = sym_new_not_null(ctx); maybe_self = sym_new_not_null(ctx); + /* Variables=['func'L, 'maybe_self'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-2 - oparg] = func; + /* Variables=['func'ML, 'maybe_self'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ + /* Variables=['func'ML, 'maybe_self'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1 - oparg] = maybe_self; + /* Variables=['func'ML, 'maybe_self'ML, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ break; } @@ -1625,15 +1990,19 @@ break; } new_frame = frame_new(ctx, co, 0, NULL, 0); + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = (JitOptSymbol *)new_frame; + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CHECK_FUNCTION_VERSION: { JitOptSymbol *callable; callable = stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = (uint32_t)this_instr->operand0; if (sym_is_const(ctx, callable) && sym_matches_type(callable, &PyFunction_Type)) { assert(PyFunction_Check(sym_get_const(ctx, callable))); @@ -1663,9 +2032,12 @@ case _CALL_NON_PY_GENERAL: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -1673,7 +2045,9 @@ JitOptSymbol *null; JitOptSymbol *callable; null = stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ sym_set_null(null); sym_set_type(callable, &PyMethod_Type); break; @@ -1683,7 +2057,9 @@ JitOptSymbol **self_or_null; JitOptSymbol **callable; self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable[0] = sym_new_not_null(ctx); self_or_null[0] = sym_new_not_null(ctx); break; @@ -1700,7 +2076,9 @@ JitOptSymbol *self_or_null; JitOptSymbol *callable; self_or_null = stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = stack_pointer[-2 - oparg]; + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ assert(sym_matches_type(callable, &PyFunction_Type)); if (sym_is_const(ctx, callable)) { if (sym_is_null(self_or_null) || sym_is_not_null(self_or_null)) { @@ -1725,7 +2103,9 @@ JitOptSymbol *self_or_null; _Py_UOpsAbstractFrame *new_frame; args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ int argcount = oparg; PyCodeObject *co = NULL; assert((this_instr + 2)->opcode == _PUSH_FRAME); @@ -1745,17 +2125,22 @@ } else { new_frame = frame_new(ctx, co, 0, NULL, 0); } + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = (JitOptSymbol *)new_frame; + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _PUSH_FRAME: { _Py_UOpsAbstractFrame *new_frame; new_frame = (_Py_UOpsAbstractFrame *)stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ ctx->frame->stack_pointer = stack_pointer; ctx->frame = new_frame; ctx->curr_frame_depth++; @@ -1786,27 +2171,36 @@ case _CALL_TYPE_1: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; + /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _CALL_STR_1: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; + /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _CALL_TUPLE_1: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; + /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -1815,14 +2209,19 @@ JitOptSymbol *self; JitOptSymbol *init; args = &stack_pointer[-oparg]; + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ args = &stack_pointer[-oparg]; uint32_t type_version = (uint32_t)this_instr->operand0; (void)type_version; (void)args; self = sym_new_not_null(ctx); init = sym_new_not_null(ctx); + /* Variables=['self'L, 'init'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-2 - oparg] = self; + /* Variables=['self'ML, 'init'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ + /* Variables=['self'ML, 'init'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1 - oparg] = init; + /* Variables=['self'ML, 'init'ML, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ break; } @@ -1830,111 +2229,146 @@ _Py_UOpsAbstractFrame *init_frame; init_frame = NULL; ctx->done = true; + /* Variables=['init_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = (JitOptSymbol *)init_frame; + /* Variables=['init_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['init_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _EXIT_INIT_CHECK: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _CALL_BUILTIN_CLASS: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_BUILTIN_O: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_BUILTIN_FAST: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_BUILTIN_FAST_WITH_KEYWORDS: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_LEN: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_ISINSTANCE: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_LIST_APPEND: { stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ break; } case _CALL_METHOD_DESCRIPTOR_O: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_METHOD_DESCRIPTOR_NOARGS: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_METHOD_DESCRIPTOR_FAST: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -1943,7 +2377,9 @@ case _MAYBE_EXPAND_METHOD_KW: { JitOptSymbol *kwnames_out; kwnames_out = sym_new_not_null(ctx); + /* Variables=['callable'A, 'self_or_null'A, 'args'A, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames_out; + /* Variables=['callable'A, 'self_or_null'A, 'args'A, 'kwnames_out'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ break; } @@ -1953,9 +2389,12 @@ _Py_UOpsAbstractFrame *new_frame; new_frame = NULL; ctx->done = true; + /* Variables=['new_frame'L]; base=-3 - oparg; sp=0; logical_sp=-2 - oparg */ stack_pointer[-3 - oparg] = (JitOptSymbol *)new_frame; + /* Variables=['new_frame'ML]; base=-3 - oparg; sp=0; logical_sp=-2 - oparg */ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['new_frame'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ break; } @@ -1978,9 +2417,12 @@ case _CALL_KW_NON_PY: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-3 - oparg; sp=0; logical_sp=-2 - oparg */ stack_pointer[-3 - oparg] = res; + /* Variables=['res'ML]; base=-3 - oparg; sp=0; logical_sp=-2 - oparg */ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ break; } @@ -1989,8 +2431,12 @@ JitOptSymbol *kwargs_out; tuple = sym_new_not_null(ctx); kwargs_out = sym_new_not_null(ctx); + /* Variables=['func', 'unused', 'tuple'L, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-2] = tuple; + /* Variables=['func', 'unused', 'tuple'ML, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ + /* Variables=['func', 'unused', 'tuple'ML, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-1] = kwargs_out; + /* Variables=['func', 'unused', 'tuple'ML, 'kwargs_out'ML]; base=-4; sp=0; logical_sp=0 */ break; } @@ -1999,16 +2445,21 @@ case _MAKE_FUNCTION: { JitOptSymbol *func; func = sym_new_not_null(ctx); + /* Variables=['func'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = func; + /* Variables=['func'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _SET_FUNCTION_ATTRIBUTE: { JitOptSymbol *func_out; func_out = sym_new_not_null(ctx); + /* Variables=['func_out'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = func_out; + /* Variables=['func_out'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func_out'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -2024,46 +2475,58 @@ assert(framesize > 0); assert(framesize <= curr_space); curr_space -= framesize; + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ co = get_code(this_instr); if (co == NULL) { ctx->done = true; } - stack_pointer[-1] = res; break; } case _BUILD_SLICE: { JitOptSymbol *slice; slice = sym_new_not_null(ctx); + /* Variables=['slice'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = slice; + /* Variables=['slice'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['slice'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } case _CONVERT_VALUE: { JitOptSymbol *result; result = sym_new_not_null(ctx); + /* Variables=['result'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = result; + /* Variables=['result'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _FORMAT_SIMPLE: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _FORMAT_WITH_SPEC: { JitOptSymbol *res; res = sym_new_not_null(ctx); + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -2071,11 +2534,15 @@ JitOptSymbol *bottom; JitOptSymbol *top; bottom = stack_pointer[-1 - (oparg-1)]; + /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ assert(oparg > 0); top = bottom; + /* Variables=['bottom'ML, 'unused'MA, 'top'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer[0] = top; + /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ break; } @@ -2084,7 +2551,9 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ bool lhs_int = sym_matches_type(left, &PyLong_Type); bool rhs_int = sym_matches_type(right, &PyLong_Type); bool lhs_float = sym_matches_type(left, &PyFloat_Type); @@ -2118,9 +2587,12 @@ else { res = sym_new_type(ctx, &PyFloat_Type); } + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -2128,7 +2600,9 @@ JitOptSymbol **top; JitOptSymbol **bottom; top = &stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ bottom = &stack_pointer[-2 - (oparg-2)]; + /* Variables=[]; base=-2 - (oparg-2); sp=0; logical_sp=-2 - (oparg-2) */ JitOptSymbol *temp = bottom[0]; bottom[0] = top[0]; top[0] = temp; @@ -2157,6 +2631,7 @@ case _GUARD_IS_TRUE_POP: { JitOptSymbol *flag; flag = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_is_const(ctx, flag)) { PyObject *value = sym_get_const(ctx, flag); assert(value != NULL); @@ -2165,12 +2640,14 @@ sym_set_const(flag, Py_True); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _GUARD_IS_FALSE_POP: { JitOptSymbol *flag; flag = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_is_const(ctx, flag)) { PyObject *value = sym_get_const(ctx, flag); assert(value != NULL); @@ -2179,12 +2656,14 @@ sym_set_const(flag, Py_False); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _GUARD_IS_NONE_POP: { JitOptSymbol *flag; flag = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_is_const(ctx, flag)) { PyObject *value = sym_get_const(ctx, flag); assert(value != NULL); @@ -2197,12 +2676,14 @@ sym_set_const(flag, Py_None); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _GUARD_IS_NOT_NONE_POP: { JitOptSymbol *flag; flag = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_is_const(ctx, flag)) { PyObject *value = sym_get_const(ctx, flag); assert(value != NULL); @@ -2214,6 +2695,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -2252,9 +2734,12 @@ JitOptSymbol *value; PyObject *ptr = (PyObject *)this_instr->operand0; value = sym_new_const(ctx, ptr); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2262,7 +2747,9 @@ JitOptSymbol *value; PyObject *ptr = (PyObject *)this_instr->operand0; value = sym_new_const(ctx, ptr); + /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -2270,9 +2757,12 @@ JitOptSymbol *value; PyObject *ptr = (PyObject *)this_instr->operand0; value = sym_new_const(ctx, ptr); + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2280,16 +2770,21 @@ JitOptSymbol *value; PyObject *ptr = (PyObject *)this_instr->operand0; value = sym_new_const(ctx, ptr); + /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _POP_TWO_LOAD_CONST_INLINE_BORROW: { JitOptSymbol *value; value = sym_new_not_null(ctx); + /* Variables=['value'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = value; + /* Variables=['value'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } diff --git a/Python/stackrefs.c b/Python/stackrefs.c index 450dacde6d29e5..389b309aaea3e1 100644 --- a/Python/stackrefs.c +++ b/Python/stackrefs.c @@ -71,6 +71,9 @@ _Py_stackref_close(_PyStackRef ref, const char *filename, int linenumber) } PyObject *obj; if (ref.index <= LAST_PREDEFINED_STACKREF_INDEX) { + if (ref.index == 0) { + _Py_FatalErrorFormat(__func__, "Passing NULL to PyStackRef_CLOSE at %s:%d\n",filename, linenumber); + } // Pre-allocated reference to None, False or True -- Do not clear TableEntry *entry = _Py_hashtable_get(interp->open_stackrefs_table, (void *)ref.index); obj = entry->obj; diff --git a/Tools/cases_generator/generators_common.py b/Tools/cases_generator/generators_common.py index 4571811bcdff3c..6d9da67b307ec2 100644 --- a/Tools/cases_generator/generators_common.py +++ b/Tools/cases_generator/generators_common.py @@ -13,9 +13,8 @@ from lexer import Token from stack import Storage, StackError from parser import Stmt, SimpleStmt, BlockStmt, IfStmt, ForStmt, WhileStmt, MacroIfStmt - -# Set this to true for voluminous output showing state of stack and locals -PRINT_STACKS = False +from stack import PRINT_STACKS +DEBUG = False class TokenIterator: @@ -152,22 +151,7 @@ def deopt_if( storage: Storage, inst: Instruction | None, ) -> bool: - self.out.start_line() - self.out.emit("if (") - lparen = next(tkn_iter) - assert lparen.kind == "LPAREN" - first_tkn = tkn_iter.peek() - emit_to(self.out, tkn_iter, "RPAREN") - self.emit(") {\n") - next(tkn_iter) # Semi colon - assert inst is not None - assert inst.family is not None, inst - family_name = inst.family.name - self.emit(f"UPDATE_MISS_STATS({family_name});\n") - self.emit(f"assert(_PyOpcode_Deopt[opcode] == ({family_name}));\n") - self.emit(f"JUMP_TO_PREDICTED({family_name});\n") - self.emit("}\n") - return not always_true(first_tkn) + raise NotImplementedError() exit_if = deopt_if @@ -242,6 +226,7 @@ def decref_inputs( next(tkn_iter) next(tkn_iter) next(tkn_iter) + self._print_storage("DECREF_INPUTS", storage) try: storage.close_inputs(self.out) except StackError as ex: @@ -249,7 +234,6 @@ def decref_inputs( except Exception as ex: ex.args = (ex.args[0] + str(tkn),) raise - self._print_storage(storage) return True def kill_inputs( @@ -372,7 +356,7 @@ def sync_sp( next(tkn_iter) storage.clear_inputs("when syncing stack") storage.flush(self.out) - self._print_storage(storage) + storage.stack.clear(self.out) return True def stack_pointer( @@ -406,7 +390,6 @@ def goto_label(self, goto: Token, label: Token, storage: Storage) -> None: def emit_save(self, storage: Storage) -> None: storage.flush(self.out) storage.save(self.out) - self._print_storage(storage) def save_stack( self, @@ -424,7 +407,6 @@ def save_stack( def emit_reload(self, storage: Storage) -> None: storage.reload(self.out) - self._print_storage(storage) def reload_stack( self, @@ -453,9 +435,10 @@ def instruction_size(self, self.out.emit(f" {uop.instruction_size} ") return True - def _print_storage(self, storage: Storage) -> None: - if PRINT_STACKS: + def _print_storage(self, reason:str, storage: Storage) -> None: + if DEBUG: self.out.start_line() + self.emit(f"/* {reason} */\n") self.emit(storage.as_comment()) self.out.start_line() @@ -514,7 +497,6 @@ def emit_SimpleStmt( var.memory_offset = None break if tkn.text.startswith("DISPATCH"): - self._print_storage(storage) reachable = False self.out.emit(tkn) else: @@ -536,6 +518,8 @@ def emit_MacroIfStmt( self.out.emit(stmt.condition) branch = stmt.else_ is not None reachable = True + if branch: + else_storage = storage.copy() for s in stmt.body: r, tkn, storage = self._emit_stmt(s, uop, storage, inst) if tkn is not None: @@ -543,7 +527,6 @@ def emit_MacroIfStmt( if not r: reachable = False if branch: - else_storage = storage.copy() assert stmt.else_ is not None self.out.emit(stmt.else_) assert stmt.else_body is not None @@ -553,7 +536,8 @@ def emit_MacroIfStmt( self.out.emit(tkn) if not r: reachable = False - storage.merge(else_storage, self.out) + else_storage.merge(storage, self.out) + storage = else_storage self.out.emit(stmt.endif) return reachable, None, storage @@ -596,7 +580,6 @@ def emit_IfStmt( reachable = True return reachable, rbrace, storage except StackError as ex: - self._print_storage(if_storage) assert rbrace is not None raise analysis_error(ex.args[0], rbrace) from None @@ -659,20 +642,18 @@ def emit_tokens( storage: Storage, inst: Instruction | None, emit_braces: bool = True - ) -> Storage: + ) -> tuple[bool, Storage]: self.out.start_line() reachable, tkn, storage = self.emit_BlockStmt(code.body, code, storage, inst, emit_braces) assert tkn is not None try: if reachable: - self._print_storage(storage) storage.push_outputs() - self._print_storage(storage) if emit_braces: self.out.emit(tkn) except StackError as ex: raise analysis_error(ex.args[0], tkn) from None - return storage + return reachable, storage def emit(self, txt: str | Token) -> None: self.out.emit(txt) diff --git a/Tools/cases_generator/optimizer_generator.py b/Tools/cases_generator/optimizer_generator.py index f515bb6fdc9213..7a32275347e896 100644 --- a/Tools/cases_generator/optimizer_generator.py +++ b/Tools/cases_generator/optimizer_generator.py @@ -145,7 +145,7 @@ def write_uop( # No reference management of inputs needed. for var in storage.inputs: # type: ignore[possibly-undefined] var.in_local = False - storage = emitter.emit_tokens(override, storage, None, False) + _, storage = emitter.emit_tokens(override, storage, None, False) out.start_line() storage.flush(out) else: diff --git a/Tools/cases_generator/stack.py b/Tools/cases_generator/stack.py index bf7b8831fe56f9..c38f8a5d112783 100644 --- a/Tools/cases_generator/stack.py +++ b/Tools/cases_generator/stack.py @@ -6,6 +6,8 @@ UNUSED = {"unused"} +# Set this to true for voluminous output showing state of stack and locals +PRINT_STACKS = 1 # False def maybe_parenthesize(sym: str) -> str: """Add parentheses around a string if it contains an operator @@ -131,9 +133,6 @@ def as_int(self) -> int | None: return None return self.numeric - def __bool__(self) -> bool: - return self.numeric != 0 or bool(self.positive) or bool(self.negative) - def __str__(self) -> str: return self.to_c() @@ -151,7 +150,7 @@ def __repr__(self) -> str: def compact_str(self) -> str: mtag = "M" if self.memory_offset else "" - dtag = "D" if self.in_local else "" + dtag = "L" if self.in_local else "" atag = "A" if self.is_array() else "" return f"'{self.item.name}'{mtag}{dtag}{atag}" @@ -167,6 +166,11 @@ def undefined(defn: StackItem) -> "Local": def from_memory(defn: StackItem, offset: PointerOffset) -> "Local": return Local(defn, offset, True) + @staticmethod + def register(name: str) -> "Local": + item = StackItem(name, None, "", False, True) + return Local(item, None, True) + def kill(self) -> None: self.in_local = False self.memory_offset = None @@ -230,45 +234,49 @@ def drop(self, var: StackItem, check_liveness: bool) -> None: raise StackError(f"Dropping live value '{var.name}'") def pop(self, var: StackItem, out: CWriter) -> Local: + if self.variables: + top = self.variables[-1] + if var.is_array() != top.is_array() or top.size != var.size: + # Mismatch in variables + self.clear(out) self.logical_sp = self.logical_sp.pop(var) indirect = "&" if var.is_array() else "" if self.variables: popped = self.variables.pop() - if var.is_array() == popped.is_array() and popped.size == var.size: - if not var.used: - return popped - if popped.name != var.name: - rename = f"{var.name} = {popped.name};\n" - popped.item = var - else: - rename = "" - if not popped.in_local: - if popped.memory_offset is None: - popped.memory_offset = self.logical_sp - assert popped.memory_offset == self.logical_sp, (popped, self.as_comment()) - offset = popped.memory_offset.to_c() - if var.is_array(): - defn = f"{var.name} = &stack_pointer[{offset}];\n" - else: - defn = f"{var.name} = stack_pointer[{offset}];\n" - popped.in_local = True - else: - defn = rename - out.emit(defn) + assert var.is_array() == popped.is_array() and popped.size == var.size + if not var.used: return popped - #Mismatch - self.clear(out) + if popped.name != var.name: + rename = f"{var.name} = {popped.name};\n" + popped.item = var + else: + rename = "" + if not popped.in_local: + if popped.memory_offset is None: + popped.memory_offset = self.logical_sp + assert popped.memory_offset == self.logical_sp, (popped, self.as_comment()) + offset = popped.memory_offset - self.physical_sp + if var.is_array(): + defn = f"{var.name} = &stack_pointer[{offset.to_c()}];\n" + else: + defn = f"{var.name} = stack_pointer[{offset.to_c()}];\n" + popped.in_local = True + else: + defn = rename + out.emit(defn) + return popped self.base_offset = self.logical_sp if var.name in UNUSED or not var.used: return Local.unused(var, self.base_offset) cast = f"({var.type})" if (not indirect and var.type) else "" bits = ".bits" if cast and self.extract_bits else "" - offset = (self.base_offset - self.physical_sp).to_c() - assign = f"{var.name} = {cast}{indirect}stack_pointer[{offset}]{bits};\n" + c_offset = (self.base_offset - self.physical_sp).to_c() + assign = f"{var.name} = {cast}{indirect}stack_pointer[{c_offset}]{bits};\n" out.emit(assign) + self._print(out) return Local.from_memory(var, self.base_offset) - def clear(self, out: CWriter): + def clear(self, out: CWriter) -> None: "Flush to memory and clear variables stack" self.flush(out) self.variables = [] @@ -296,10 +304,11 @@ def _save_physical_sp(self, out: CWriter) -> None: diff = self.logical_sp - self.physical_sp out.start_line() out.emit(f"stack_pointer += {diff.to_c()};\n") - out.emit("assert(WITHIN_STACK_BOUNDS());\n") + out.emit(f"assert(WITHIN_STACK_BOUNDS());\n") self.physical_sp = self.logical_sp + self._print(out) - def flush(self, out: CWriter) -> None: + def save_variables(self, out: CWriter) -> None: out.start_line() var_offset = self.base_offset for var in self.variables: @@ -308,10 +317,15 @@ def flush(self, out: CWriter) -> None: not var.memory_offset and not var.is_array() ): + self._print(out) var.memory_offset = var_offset stack_offset = var_offset - self.physical_sp Stack._do_emit(out, var.item, stack_offset, self.cast_type, self.extract_bits) + out.emit(self.as_comment() + "\n") var_offset = var_offset.push(var.item) + + def flush(self, out: CWriter) -> None: + self.save_variables(out) self._save_physical_sp(out) out.start_line() @@ -327,9 +341,13 @@ def sp_offset(self) -> str: def as_comment(self) -> str: variables = ", ".join([v.compact_str() for v in self.variables]) return ( - f"/* Variables: {variables}. base: {self.base_offset.to_c()}. sp: {self.physical_sp.to_c()}. logical_sp: {self.logical_sp.to_c()} */" + f"/* Variables=[{variables}]; base={self.base_offset.to_c()}; sp={self.physical_sp.to_c()}; logical_sp={self.logical_sp.to_c()} */" ) + def _print(self, out: CWriter) -> None: + if PRINT_STACKS: + out.emit(self.as_comment() + "\n") + def copy(self) -> "Stack": other = Stack(self.extract_bits, self.cast_type) other.base_offset = self.base_offset @@ -356,7 +374,6 @@ def align(self, other: "Stack", out: CWriter) -> None: diff = other.physical_sp - self.physical_sp out.start_line() out.emit(f"stack_pointer += {diff.to_c()};\n") - out.emit("assert(WITHIN_STACK_BOUNDS());\n") self.physical_sp = other.physical_sp def merge(self, other: "Stack", out: CWriter) -> None: @@ -619,10 +636,10 @@ def push_outputs(self) -> None: def as_comment(self) -> str: stack_comment = self.stack.as_comment() - next_line = "\n " + next_line = "\n " inputs = ", ".join([var.compact_str() for var in self.inputs]) outputs = ", ".join([var.compact_str() for var in self.outputs]) - return f"{stack_comment[:-2]}{next_line}inputs: {inputs}{next_line}outputs: {outputs}*/" + return f"{stack_comment[:-2]}{next_line}inputs: {inputs} outputs: {outputs}*/" def close_inputs(self, out: CWriter) -> None: @@ -635,7 +652,7 @@ def close_named(close: str, name: str, overwrite: str) -> None: tmp_defined = True out.emit(f"tmp = {name};\n") out.emit(f"{name} = {overwrite};\n") - self.stack.flush(out) + self.stack.save_variables(out) out.emit(f"{close}(tmp);\n") else: out.emit(f"{close}({name});\n") @@ -676,7 +693,6 @@ def close_variable(var: Local, overwrite: str) -> None: if output is not None: raise StackError("Cannot call DECREF_INPUTS with more than one live output") output = var - self.stack.flush(out) if output is not None: if output.is_array(): assert len(self.inputs) == 1 @@ -689,6 +705,7 @@ def close_variable(var: Local, overwrite: str) -> None: return if var_size(lowest.item) != var_size(output.item): raise StackError("Cannot call DECREF_INPUTS with live output not matching first input size") + self.stack.flush(out) lowest.in_local = True close_variable(lowest, output.name) assert lowest.memory_offset is not None diff --git a/Tools/cases_generator/tier1_generator.py b/Tools/cases_generator/tier1_generator.py index ccf2dfe2d2e684..6e43a82cf26d9a 100644 --- a/Tools/cases_generator/tier1_generator.py +++ b/Tools/cases_generator/tier1_generator.py @@ -9,6 +9,8 @@ Analysis, Instruction, Uop, + Label, + CodeSection, Part, analyze_files, Skip, @@ -22,9 +24,13 @@ write_header, type_and_null, Emitter, + TokenIterator, + always_true, + emit_to, ) from cwriter import CWriter from typing import TextIO +from lexer import Token from stack import Local, Stack, StackError, get_stack_effect, Storage DEFAULT_OUTPUT = ROOT / "Python/generated_cases.c.h" @@ -62,6 +68,63 @@ def declare_variables(inst: Instruction, out: CWriter) -> None: declare_variable(var, out) +def move_tos_to_cache(stack: Stack, out: CWriter) -> None: + out.emit("_PyStackRef _tmp;\n") + tmp = StackItem("_tmp", None, "", False, True) + tos = stack.pop(tmp, out) + stack.flush(out) + if tos.name != "_tos": + out.emit(f"_tos = {tos.name};\n") + + +class Tier1Emitter(Emitter): + + def __init__(self, out: CWriter, labels: dict[str, Label]): + super().__init__(out, labels) + self._replacers["DISPATCH"] = self.dispatch + self._replacers["DISPATCH_SAME_OPARG"] = self.dispatch + self._replacers["DISPATCH_GOTO"] = self.dispatch + + def dispatch( + self, + tkn: Token, + tkn_iter: TokenIterator, + uop: CodeSection, + storage: Storage, + inst: Instruction | None, + ) -> bool: + move_tos_to_cache(storage.stack, self.out) + self.out.emit(tkn) + return False + + def deopt_if( + self, + tkn: Token, + tkn_iter: TokenIterator, + uop: CodeSection, + storage: Storage, + inst: Instruction | None, + ) -> bool: + self.out.start_line() + self.out.emit("if (") + lparen = next(tkn_iter) + assert lparen.kind == "LPAREN" + first_tkn = tkn_iter.peek() + emit_to(self.out, tkn_iter, "RPAREN") + self.emit(") {\n") + next(tkn_iter) # Semi colon + assert inst is not None + assert inst.family is not None + family_name = inst.family.name + move_tos_to_cache(storage.stack.copy(), self.out) + self.emit(f"UPDATE_MISS_STATS({family_name});\n") + self.emit(f"assert(_PyOpcode_Deopt[opcode] == ({family_name}));\n") + self.emit(f"JUMP_TO_PREDICTED({family_name});\n") + self.emit("}\n") + return not always_true(first_tkn) + + exit_if = deopt_if + def write_uop( uop: Part, emitter: Emitter, @@ -74,18 +137,18 @@ def write_uop( if isinstance(uop, Skip): entries = "entries" if uop.size > 1 else "entry" emitter.emit(f"/* Skip {uop.size} cache {entries} */\n") - return (offset + uop.size), stack + return True, (offset + uop.size), stack if isinstance(uop, Flush): emitter.emit(f"// flush\n") stack.flush(emitter.out) - return offset, stack + return True, offset, stack locals: dict[str, Local] = {} emitter.out.start_line() if braces: emitter.out.emit(f"// {uop.name}\n") emitter.emit("{\n") + stack._print(emitter.out) storage = Storage.for_uop(stack, uop, emitter.out) - emitter._print_storage(storage) for cache in uop.caches: if cache.name != "unused": @@ -102,12 +165,12 @@ def write_uop( emitter.emit(f"(void){cache.name};\n") offset += cache.size - storage = emitter.emit_tokens(uop, storage, inst, False) + reachable, storage = emitter.emit_tokens(uop, storage, inst, False) if braces: emitter.out.start_line() emitter.emit("}\n") # emitter.emit(stack.as_comment() + "\n") - return offset, storage.stack + return reachable, offset, storage.stack def uses_this(inst: Instruction) -> bool: @@ -184,7 +247,7 @@ def generate_tier1( {LABEL_START_MARKER} """) out = CWriter(outfile, 2, lines) - emitter = Emitter(out, analysis.labels) + emitter = Tier1Emitter(out, analysis.labels) generate_tier1_labels(analysis, emitter) outfile.write(f"{LABEL_END_MARKER}\n") outfile.write(FOOTER) @@ -204,16 +267,22 @@ def generate_tier1_labels( emitter.emit_tokens(label, storage, None) emitter.emit("\n\n") +def get_popped(inst: Instruction, analysis: Analysis) -> str: + stack = get_stack_effect(inst) + return (-stack.base_offset).to_c() def generate_tier1_cases( analysis: Analysis, outfile: TextIO, lines: bool ) -> None: out = CWriter(outfile, 2, lines) - emitter = Emitter(out, analysis.labels) + emitter = Tier1Emitter(out, analysis.labels) out.emit("\n") for name, inst in sorted(analysis.instructions.items()): out.emit("\n") out.emit(f"TARGET({name}) {{\n") + popped = get_popped(inst, analysis) + if inst.name != "INTERPRETER_EXIT": + out.emit(f"assert(STACK_LEVEL() - {popped} >= -1);\n") # We need to ifdef it because this breaks platforms # without computed gotos/tail calling. out.emit(f"#if Py_TAIL_CALL_INTERP\n") @@ -247,15 +316,16 @@ def generate_tier1_cases( ) declare_variables(inst, out) offset = 1 # The instruction itself + cache = Local.register("_tos") stack = Stack() + stack.push(cache) for part in inst.parts: # Only emit braces if more than one uop insert_braces = len([p for p in inst.parts if isinstance(p, Uop)]) > 1 - offset, stack = write_uop(part, emitter, offset, stack, inst, insert_braces) + reachable, offset, stack = write_uop(part, emitter, offset, stack, inst, insert_braces) out.start_line() - - stack.flush(out) - if not inst.parts[-1].properties.always_exits: + if reachable: + move_tos_to_cache(stack, out) out.emit("DISPATCH();\n") out.start_line() out.emit("}") diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index 75b0d5cb51072c..0ac2a0497e5d02 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -154,7 +154,7 @@ def write_uop(uop: Uop, emitter: Emitter, stack: Stack) -> Stack: cast = f"uint{cache.size*16}_t" emitter.emit(f"{type}{cache.name} = ({cast})CURRENT_OPERAND{idx}();\n") idx += 1 - storage = emitter.emit_tokens(uop, storage, None, False) + _, storage = emitter.emit_tokens(uop, storage, None, False) storage.flush(emitter.out) except StackError as ex: raise analysis_error(ex.args[0], uop.body.open) from None From 492df4e46015808ae3f55bf0f4846a7d567f8bb7 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 4 Apr 2025 12:59:49 +0100 Subject: [PATCH 03/10] Initialize sub-stack slot on non-debug builds as well --- Include/internal/pycore_interpframe.h | 3 +-- Python/ceval.c | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Include/internal/pycore_interpframe.h b/Include/internal/pycore_interpframe.h index 360dd362ac5978..80cbf780bb7200 100644 --- a/Include/internal/pycore_interpframe.h +++ b/Include/internal/pycore_interpframe.h @@ -146,11 +146,10 @@ _PyFrame_Initialize( frame->owner = FRAME_OWNED_BY_THREAD; frame->visited = 0; #ifdef Py_DEBUG - frame->localsplus[code->co_nlocalsplus] = PyStackRef_NULL; frame->lltrace = 0; #endif - for (int i = null_locals_from; i < code->co_nlocalsplus; i++) { + for (int i = null_locals_from; i <= code->co_nlocalsplus; i++) { frame->localsplus[i] = PyStackRef_NULL; } } diff --git a/Python/ceval.c b/Python/ceval.c index ec891b4d7efb9d..0802625dbd071d 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -990,9 +990,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int * These are cached values from the frame and code object. */ _Py_CODEUNIT *next_instr; _PyStackRef *stack_pointer; -#ifdef Py_DEBUG entry_frame.localsplus[0] = PyStackRef_NULL; -#endif #ifdef Py_STACKREF_DEBUG entry_frame.f_funcobj = PyStackRef_None; #elif defined(Py_DEBUG) From 234cfd2b369f067451d377358cf45b039b1275f1 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 4 Apr 2025 13:51:10 +0100 Subject: [PATCH 04/10] Remove TOS caching parts --- Include/internal/pycore_interpframe.h | 8 +- Lib/test/test_sys.py | 4 +- Objects/codeobject.c | 2 +- Python/bytecodes.c | 3 +- Python/ceval.c | 14 +- Python/ceval_macros.h | 4 +- Python/executor_cases.c.h | 3 +- Python/generated_cases.c.h | 6331 ++++++-------------- Python/optimizer_analysis.c | 2 +- Tools/cases_generator/generators_common.py | 17 +- Tools/cases_generator/tier1_generator.py | 65 +- 11 files changed, 2006 insertions(+), 4447 deletions(-) diff --git a/Include/internal/pycore_interpframe.h b/Include/internal/pycore_interpframe.h index 80cbf780bb7200..1d373d55ab2de8 100644 --- a/Include/internal/pycore_interpframe.h +++ b/Include/internal/pycore_interpframe.h @@ -43,7 +43,7 @@ static inline PyFunctionObject *_PyFrame_GetFunction(_PyInterpreterFrame *f) { } static inline _PyStackRef *_PyFrame_Stackbase(_PyInterpreterFrame *f) { - return (f->localsplus + _PyFrame_GetCode(f)->co_nlocalsplus + 1); + return (f->localsplus + _PyFrame_GetCode(f)->co_nlocalsplus); } static inline _PyStackRef _PyFrame_StackPeek(_PyInterpreterFrame *f) { @@ -134,7 +134,7 @@ _PyFrame_Initialize( frame->f_builtins = func_obj->func_builtins; frame->f_globals = func_obj->func_globals; frame->f_locals = locals; - frame->stackpointer = frame->localsplus + code->co_nlocalsplus + 1; + frame->stackpointer = frame->localsplus + code->co_nlocalsplus; frame->frame_obj = NULL; #ifdef Py_GIL_DISABLED _PyFrame_InitializeTLBC(tstate, frame, code); @@ -149,7 +149,7 @@ _PyFrame_Initialize( frame->lltrace = 0; #endif - for (int i = null_locals_from; i <= code->co_nlocalsplus; i++) { + for (int i = null_locals_from; i < code->co_nlocalsplus; i++) { frame->localsplus[i] = PyStackRef_NULL; } } @@ -317,7 +317,7 @@ _PyFrame_PushTrampolineUnchecked(PyThreadState *tstate, PyCodeObject *code, int #endif frame->f_locals = NULL; assert(stackdepth <= code->co_stacksize); - frame->stackpointer = frame->localsplus + code->co_nlocalsplus + stackdepth + 1; + frame->stackpointer = frame->localsplus + code->co_nlocalsplus + stackdepth; frame->frame_obj = NULL; #ifdef Py_GIL_DISABLED _PyFrame_InitializeTLBC(tstate, frame, code); diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 92db8dad94eee2..368a5ba413b6ce 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -1661,9 +1661,9 @@ def func(): return sys._getframe() x = func() if support.Py_GIL_DISABLED: - INTERPRETER_FRAME = '9PihcPP' + INTERPRETER_FRAME = '9PihcP' else: - INTERPRETER_FRAME = '9PhcPP' + INTERPRETER_FRAME = '9PhcP' check(x, size('3PiccPPP' + INTERPRETER_FRAME + 'P')) # function def func(): pass diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 70e80375435e95..33505b40a7329f 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -546,7 +546,7 @@ init_code(PyCodeObject *co, struct _PyCodeConstructor *con) /* derived values */ co->co_nlocalsplus = nlocalsplus; co->co_nlocals = nlocals; - co->co_framesize = nlocalsplus + con->stacksize + FRAME_SPECIALS_SIZE + 1; + co->co_framesize = nlocalsplus + con->stacksize + FRAME_SPECIALS_SIZE; co->co_ncellvars = ncellvars; co->co_nfreevars = nfreevars; #ifdef Py_GIL_DISABLED diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 650ab1892c2c86..a14b771cefbcf2 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -3997,9 +3997,8 @@ dummy_func( tstate, (PyCodeObject *)&_Py_InitCleanup, 1, frame); assert(_PyFrame_GetBytecode(shim)[0].op.code == EXIT_INIT_CHECK); assert(_PyFrame_GetBytecode(shim)[1].op.code == RETURN_VALUE); - shim->localsplus[0] = PyStackRef_NULL; /* Push self onto stack of shim */ - shim->localsplus[1] = PyStackRef_DUP(self[0]); + shim->localsplus[0] = PyStackRef_DUP(self[0]); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, init[0], NULL, args-1, oparg+1, NULL, shim); DEAD(init); diff --git a/Python/ceval.c b/Python/ceval.c index 0802625dbd071d..795fbf0b90c366 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -190,7 +190,6 @@ dump_stack(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer) static void lltrace_instruction(_PyInterpreterFrame *frame, - _PyStackRef _tos, _PyStackRef *stack_pointer, _Py_CODEUNIT *next_instr, int opcode, @@ -198,9 +197,6 @@ lltrace_instruction(_PyInterpreterFrame *frame, { int offset = 0; if (frame->owner < FRAME_OWNED_BY_INTERPRETER) { - printf("_tos = "); - dump_item(_tos); - printf("; "); dump_stack(frame, stack_pointer); offset = (int)(next_instr - _PyFrame_GetBytecode(frame)); } @@ -947,13 +943,6 @@ _PyObjectArray_Free(PyObject **array, PyObject **scratch) /* This setting is reversed below following _PyEval_EvalFrameDefault */ #endif -#ifdef Py_GIL_DISABLED -#define Py_FREE_THREADING 1 -#else -#define Py_FREE_THREADING 0 -#endif - - #if Py_TAIL_CALL_INTERP #include "opcode_targets.h" #include "generated_cases.c.h" @@ -1003,7 +992,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int #endif entry_frame.f_executable = PyStackRef_None; entry_frame.instr_ptr = (_Py_CODEUNIT *)_Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS + 1; - entry_frame.stackpointer = entry_frame.localsplus + 1; + entry_frame.stackpointer = entry_frame.localsplus; entry_frame.owner = FRAME_OWNED_BY_INTERPRETER; entry_frame.visited = 0; entry_frame.return_offset = 0; @@ -1050,7 +1039,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int _PyExecutorObject *current_executor = NULL; const _PyUOpInstruction *next_uop = NULL; #endif - _PyStackRef _tos = PyStackRef_NULL; #if Py_TAIL_CALL_INTERP return _TAIL_CALL_start_frame(frame, NULL, tstate, NULL, 0); #else diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h index 919d357aa83ac0..f19ffd23161ace 100644 --- a/Python/ceval_macros.h +++ b/Python/ceval_macros.h @@ -110,7 +110,7 @@ /* PRE_DISPATCH_GOTO() does lltrace if enabled. Normally a no-op */ #ifdef Py_DEBUG #define PRE_DISPATCH_GOTO() if (frame->lltrace >= 5) { \ - lltrace_instruction(frame, _tos, stack_pointer, next_instr, opcode, oparg); } + lltrace_instruction(frame, stack_pointer, next_instr, opcode, oparg); } #else #define PRE_DISPATCH_GOTO() ((void)0) #endif @@ -238,7 +238,7 @@ GETITEM(PyObject *v, Py_ssize_t i) { #endif #define WITHIN_STACK_BOUNDS() \ - (frame->owner == FRAME_OWNED_BY_INTERPRETER || (STACK_LEVEL() >= -1 && STACK_LEVEL() <= STACK_SIZE())) + (frame->owner == FRAME_OWNED_BY_INTERPRETER || (STACK_LEVEL() >= 0 && STACK_LEVEL() <= STACK_SIZE())) /* Data access macros */ #define FRAME_CO_CONSTS (_PyFrame_GetCode(frame)->co_consts) diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index d6901dcd75cf9c..20ac704ba94fe7 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -6105,8 +6105,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); assert(_PyFrame_GetBytecode(shim)[0].op.code == EXIT_INIT_CHECK); assert(_PyFrame_GetBytecode(shim)[1].op.code == RETURN_VALUE); - shim->localsplus[0] = PyStackRef_NULL; - shim->localsplus[1] = PyStackRef_DUP(self[0]); + shim->localsplus[0] = PyStackRef_DUP(self[0]); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, init[0], NULL, args-1, oparg+1, NULL, shim); diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 225e73b9203f92..e166c6379c1f38 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -35,30 +35,19 @@ _PyStackRef res; // _SPECIALIZE_BINARY_OP { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - rhs = _tos; - lhs = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + rhs = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + lhs = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['lhs'ML, 'rhs'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = rhs; - /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_BinaryOp(lhs, rhs, next_instr, oparg, LOCALS_ARRAY); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = rhs; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['lhs'ML]; base=-1; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(BINARY_OP); @@ -70,16 +59,10 @@ /* Skip 4 cache entries */ // _BINARY_OP { - /* Variables=['lhs'ML, 'rhs'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *lhs_o = PyStackRef_AsPyObjectBorrow(lhs); PyObject *rhs_o = PyStackRef_AsPyObjectBorrow(rhs); assert(_PyEval_BinaryOps[oparg]); - /* Variables=['lhs'ML, 'rhs'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = rhs; - /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_BinaryOps[oparg](lhs_o, rhs_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -90,27 +73,21 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = lhs; lhs = res; - /* Variables=['lhs'L, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['lhs'L, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = lhs; - /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = rhs; rhs = PyStackRef_NULL; - /* Variables=['lhs'ML, 'rhs'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['lhs'ML, 'rhs'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = rhs; - /* Variables=['lhs'ML, 'rhs'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ } - _PyStackRef _tmp; - _tmp = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -132,13 +109,11 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -146,16 +121,13 @@ } // _GUARD_NOS_FLOAT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; - left = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -164,7 +136,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_ADD_FLOAT { - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -175,15 +147,15 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - JUMP_TO_LABEL(pop_1_error); + JUMP_TO_LABEL(pop_2_error); } } - _PyStackRef _tmp; - _tmp = res; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -205,13 +177,11 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -219,16 +189,13 @@ } // _GUARD_NOS_INT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; - left = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -237,18 +204,12 @@ /* Skip 5 cache entries */ // _BINARY_OP_ADD_INT { - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -259,12 +220,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - _PyStackRef _tmp; - _tmp = res; - stack_pointer += -2; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -288,13 +249,11 @@ _PyStackRef res; // _GUARD_TOS_UNICODE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -302,16 +261,13 @@ } // _GUARD_NOS_UNICODE { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ tos = value; - nos = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + nos = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { - _PyStackRef _tmp; - _tmp = tos; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -320,7 +276,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_ADD_UNICODE { - /* Variables=['nos'ML, 'tos'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['nos'ML, 'tos'ML]; base=-2; sp=0; logical_sp=0 */ right = tos; left = nos; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -332,16 +288,16 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); if (res_o == NULL) { - JUMP_TO_LABEL(pop_1_error); + JUMP_TO_LABEL(pop_2_error); } res = PyStackRef_FromPyObjectSteal(res_o); } - _PyStackRef _tmp; - _tmp = res; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -363,32 +319,21 @@ /* Skip 1 cache entry */ // _GUARD_BINARY_OP_EXTEND { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - right = _tos; - left = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + right = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *descr = read_obj(&this_instr[2].cache); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr; assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5); assert(d && d->guard); - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = d->guard(left_o, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (!res) { - _PyStackRef _tmp; - _tmp = right; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML]; base=-1; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -397,7 +342,7 @@ /* Skip -4 cache entry */ // _BINARY_OP_EXTEND { - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[2].cache); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); @@ -408,25 +353,28 @@ PyObject *res_o = d->action(left_o, right_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ res = PyStackRef_FromPyObjectSteal(res_o); } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -449,13 +397,11 @@ _PyStackRef right; // _GUARD_TOS_UNICODE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -463,16 +409,13 @@ } // _GUARD_NOS_UNICODE { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ tos = value; - nos = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + nos = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { - _PyStackRef _tmp; - _tmp = tos; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -481,7 +424,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_INPLACE_ADD_UNICODE { - /* Variables=['nos'ML, 'tos'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['nos'ML, 'tos'ML]; base=-2; sp=0; logical_sp=0 */ right = tos; left = nos; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -497,9 +440,6 @@ _PyStackRef *target_local = &GETLOCAL(next_oparg); assert(PyUnicode_CheckExact(left_o)); if (PyStackRef_AsPyObjectBorrow(*target_local) != left_o) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -509,9 +449,9 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); PyObject *temp = PyStackRef_AsPyObjectSteal(*target_local); PyObject *right_o = PyStackRef_AsPyObjectSteal(right); - stack_pointer += -1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyUnicode_Append(&temp, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -528,13 +468,6 @@ SKIP_OVER(1); #endif } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -556,13 +489,11 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -570,16 +501,13 @@ } // _GUARD_NOS_FLOAT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; - left = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -588,7 +516,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_MULTIPLY_FLOAT { - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -599,15 +527,15 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - JUMP_TO_LABEL(pop_1_error); + JUMP_TO_LABEL(pop_2_error); } } - _PyStackRef _tmp; - _tmp = res; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -629,13 +557,11 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -643,16 +569,13 @@ } // _GUARD_NOS_INT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; - left = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -661,18 +584,12 @@ /* Skip 5 cache entries */ // _BINARY_OP_MULTIPLY_INT { - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -683,12 +600,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - _PyStackRef _tmp; - _tmp = res; - stack_pointer += -2; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -708,27 +625,19 @@ _PyStackRef sub_st; _PyStackRef res; /* Skip 5 cache entries */ - sub_st = _tos; - dict_st = stack_pointer[-1]; + sub_st = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + dict_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } STAT_INC(BINARY_OP, hit); PyObject *res_o; - /* Variables=['dict_st'ML, 'sub_st'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = sub_st; - /* Variables=['dict_st'ML, 'sub_st'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int rc = PyDict_GetItemRef(dict, sub, &res_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -740,27 +649,30 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = sub_st; sub_st = PyStackRef_NULL; - /* Variables=['dict_st'ML, 'sub_st'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['dict_st'ML, 'sub_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub_st; - /* Variables=['dict_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['dict_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = dict_st; dict_st = PyStackRef_NULL; - /* Variables=['dict_st'L, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['dict_st'L, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = dict_st; - /* Variables=['dict_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['dict_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (rc <= 0) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -783,11 +695,8 @@ /* Skip 5 cache entries */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -795,14 +704,11 @@ } // _BINARY_OP_SUBSCR_CHECK_FUNC { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - container = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + container = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container)); if (!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -810,9 +716,6 @@ PyHeapTypeObject *ht = (PyHeapTypeObject *)tp; PyObject *getitem_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(ht->_spec_cache.getitem); if (getitem_o == NULL) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -820,9 +723,6 @@ assert(PyFunction_Check(getitem_o)); uint32_t cached_version = FT_ATOMIC_LOAD_UINT32_RELAXED(ht->_spec_cache.getitem_version); if (((PyFunctionObject *)getitem_o)->func_version != cached_version) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -830,9 +730,6 @@ PyCodeObject *code = (PyCodeObject *)PyFunction_GET_CODE(getitem_o); assert(code->co_argcount == 2); if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -842,8 +739,8 @@ } // _BINARY_OP_SUBSCR_INIT_CALL { - /* Variables=['container'ML, '_tos'L, 'getitem'L]; base=-1; sp=0; logical_sp=2 */ - sub = _tos; + /* Variables=['container'ML, 'unused'M, 'getitem'L]; base=-2; sp=0; logical_sp=1 */ + sub = stack_pointer[-1]; new_frame = _PyFrame_PushUnchecked(tstate, getitem, 2, frame); new_frame->localsplus[0] = container; new_frame->localsplus[1] = sub; @@ -851,12 +748,12 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['new_frame'L]; base=-2; sp=0; logical_sp=-1 */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; - stack_pointer += -1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -866,13 +763,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -894,13 +784,11 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -909,47 +797,29 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBSCR_LIST_INT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ sub_st = value; - list_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + list_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); if (!PyList_CheckExact(list)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; #ifdef Py_GIL_DISABLED - /* Variables=['list_st'ML, 'sub_st'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = sub_st; - /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyList_GetItemRef((PyListObject*)list, index); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - _PyStackRef _tmp; - _tmp = sub_st; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st'ML]; base=-1; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -958,9 +828,6 @@ res = PyStackRef_FromPyObjectSteal(res_o); #else if (index >= PyList_GET_SIZE(list)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -969,36 +836,26 @@ PyObject *res_o = PyList_GET_ITEM(list, index); assert(res_o != NULL); res = PyStackRef_FromPyObjectNew(res_o); - stack_pointer += 1; #endif STAT_INC(BINARY_OP, hit); - /* Variables=['list_st'ML, 'sub_st'L]; base=-1; sp=1; logical_sp=1 */ - stack_pointer[-1] = sub_st; - /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = list_st; list_st = res; - /* Variables=['list_st'L, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['list_st'L, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = list_st; - /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['list_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = sub_st; sub_st = PyStackRef_NULL; - /* Variables=['list_st'ML, 'sub_st'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['list_st'ML, 'sub_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub_st; - /* Variables=['list_st'ML, 'sub_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['list_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ } - _PyStackRef _tmp; - _tmp = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -1022,13 +879,11 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1036,16 +891,13 @@ } // _GUARD_NOS_UNICODE { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ tos = value; - nos = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + nos = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { - _PyStackRef _tmp; - _tmp = tos; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1054,7 +906,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBSCR_STR_INT { - /* Variables=['nos'ML, 'tos'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['nos'ML, 'tos'ML]; base=-2; sp=0; logical_sp=0 */ sub_st = tos; str_st = nos; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); @@ -1062,27 +914,18 @@ assert(PyLong_CheckExact(sub)); assert(PyUnicode_CheckExact(str)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (PyUnicode_GET_LENGTH(str) <= index) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } Py_UCS4 c = PyUnicode_READ_CHAR(str, index); if (Py_ARRAY_LENGTH(_Py_SINGLETON(strings).ascii) <= c) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1090,17 +933,20 @@ STAT_INC(BINARY_OP, hit); PyObject *res_o = (PyObject*)&_Py_SINGLETON(strings).ascii[c]; PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); - stack_pointer += -1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(str_st); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectImmortal(res_o); } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -1122,13 +968,11 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1137,34 +981,25 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBSCR_TUPLE_INT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ sub_st = value; - tuple_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + tuple_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st); assert(PyLong_CheckExact(sub)); if (!PyTuple_CheckExact(tuple)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (index >= PyTuple_GET_SIZE(tuple)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1174,21 +1009,18 @@ assert(res_o != NULL); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); res = PyStackRef_FromPyObjectNew(res_o); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['tuple_st'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = tuple_st; tuple_st = res; - /* Variables=['tuple_st'L]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['tuple_st'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = tuple_st; - /* Variables=['tuple_st'ML]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['tuple_st'ML]; base=-2; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } - _PyStackRef _tmp; - _tmp = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -1210,13 +1042,11 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1224,16 +1054,13 @@ } // _GUARD_NOS_FLOAT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; - left = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1242,7 +1069,7 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBTRACT_FLOAT { - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -1253,15 +1080,15 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - JUMP_TO_LABEL(pop_1_error); + JUMP_TO_LABEL(pop_2_error); } } - _PyStackRef _tmp; - _tmp = res; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -1283,13 +1110,11 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1297,16 +1122,13 @@ } // _GUARD_NOS_INT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; - left = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); JUMP_TO_PREDICTED(BINARY_OP); @@ -1315,18 +1137,12 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBTRACT_INT { - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1337,12 +1153,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - _PyStackRef _tmp; - _tmp = res; - stack_pointer += -2; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -1361,23 +1177,17 @@ _PyStackRef res; // _SPECIALIZE_BINARY_SLICE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ #if ENABLE_SPECIALIZATION OPCODE_DEFERRED_INC(BINARY_SLICE); #endif /* ENABLE_SPECIALIZATION */ } // _BINARY_SLICE { - /* Variables=['container'M, 'start'M, '_tos'L]; base=-2; sp=0; logical_sp=1 */ - stop = _tos; - start = stack_pointer[-1]; - container = stack_pointer[-2]; - /* Variables=['container'ML, 'start'ML, 'stop'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = stop; - /* Variables=['container'ML, 'start'ML, 'stop'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['container'ML, 'start'ML, 'stop'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['container'M, 'start'M, 'stop'M]; base=-3; sp=0; logical_sp=0 */ + stop = stack_pointer[-1]; + start = stack_pointer[-2]; + container = stack_pointer[-3]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -1389,7 +1199,7 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['container'ML]; base=-2; sp=-1; logical_sp=-1 */ + /* Variables=['container'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); res_o = PyObject_GetItem(PyStackRef_AsPyObjectBorrow(container), slice); Py_DECREF(slice); @@ -1398,7 +1208,7 @@ } stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(container); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1407,9 +1217,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } @@ -1424,14 +1237,8 @@ INSTRUCTION_STATS(BUILD_LIST); _PyStackRef *values; _PyStackRef list; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ values = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *list_o = _PyList_FromStackRefStealOnSuccess(values, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1439,12 +1246,12 @@ JUMP_TO_LABEL(error); } list = PyStackRef_FromPyObjectStealMortal(list_o); - _PyStackRef _tmp; - _tmp = list; - stack_pointer += -oparg; + /* Variables=['list'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ + stack_pointer[-oparg] = list; + /* Variables=['list'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ + stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ - _tos = _tmp; + /* Variables=['list'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } @@ -1459,14 +1266,8 @@ INSTRUCTION_STATS(BUILD_MAP); _PyStackRef *values; _PyStackRef map; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ values = &stack_pointer[-oparg*2]; - /* Variables=[]; base=1 - oparg*2; sp=1; logical_sp=1 - oparg*2 */ + /* Variables=[]; base=-oparg*2; sp=0; logical_sp=-oparg*2 */ STACKREFS_TO_PYOBJECTS(values, oparg*2, values_o); if (CONVERSION_FAILED(values_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1479,7 +1280,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ + /* Variables=[]; base=-oparg*2; sp=-oparg*2; logical_sp=-oparg*2 */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1499,14 +1300,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ + /* Variables=[]; base=-oparg*2; sp=-oparg*2; logical_sp=-oparg*2 */ if (map_o == NULL) { JUMP_TO_LABEL(error); } map = PyStackRef_FromPyObjectStealMortal(map_o); - _PyStackRef _tmp; - _tmp = map; - _tos = _tmp; + /* Variables=['map'L]; base=-oparg*2; sp=-oparg*2; logical_sp=1 - oparg*2 */ + stack_pointer[0] = map; + /* Variables=['map'ML]; base=-oparg*2; sp=-oparg*2; logical_sp=1 - oparg*2 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['map'ML]; base=-oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ DISPATCH(); } @@ -1521,14 +1325,8 @@ INSTRUCTION_STATS(BUILD_SET); _PyStackRef *values; _PyStackRef set; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ values = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *set_o = PySet_New(NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1543,7 +1341,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ JUMP_TO_LABEL(error); } int err = 0; @@ -1564,19 +1362,19 @@ if (err) { stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(set_o); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } set = PyStackRef_FromPyObjectStealMortal(set_o); - _PyStackRef _tmp; - _tmp = set; - stack_pointer += -oparg; + /* Variables=['set'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ + stack_pointer[-oparg] = set; + /* Variables=['set'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ + stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ - _tos = _tmp; + /* Variables=['set'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } @@ -1591,14 +1389,8 @@ INSTRUCTION_STATS(BUILD_SLICE); _PyStackRef *args; _PyStackRef slice; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ PyObject *start_o = PyStackRef_AsPyObjectBorrow(args[0]); PyObject *stop_o = PyStackRef_AsPyObjectBorrow(args[1]); PyObject *step_o = oparg == 3 ? PyStackRef_AsPyObjectBorrow(args[2]) : NULL; @@ -1613,14 +1405,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ if (slice_o == NULL) { JUMP_TO_LABEL(error); } slice = PyStackRef_FromPyObjectStealMortal(slice_o); - _PyStackRef _tmp; - _tmp = slice; - _tos = _tmp; + /* Variables=['slice'L]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ + stack_pointer[0] = slice; + /* Variables=['slice'ML]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['slice'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } @@ -1635,14 +1430,8 @@ INSTRUCTION_STATS(BUILD_STRING); _PyStackRef *pieces; _PyStackRef str; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ pieces = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ STACKREFS_TO_PYOBJECTS(pieces, oparg, pieces_o); if (CONVERSION_FAILED(pieces_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1655,7 +1444,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ JUMP_TO_LABEL(error); } PyObject *str_o = _PyUnicode_JoinArray(&_Py_STR(empty), pieces_o, oparg); @@ -1670,14 +1459,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ if (str_o == NULL) { JUMP_TO_LABEL(error); } str = PyStackRef_FromPyObjectSteal(str_o); - _PyStackRef _tmp; - _tmp = str; - _tos = _tmp; + /* Variables=['str'L]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ + stack_pointer[0] = str; + /* Variables=['str'ML]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['str'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } @@ -1692,25 +1484,19 @@ INSTRUCTION_STATS(BUILD_TUPLE); _PyStackRef *values; _PyStackRef tup; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ values = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ PyObject *tup_o = _PyTuple_FromStackRefStealOnSuccess(values, oparg); if (tup_o == NULL) { JUMP_TO_LABEL(error); } tup = PyStackRef_FromPyObjectStealMortal(tup_o); - _PyStackRef _tmp; - _tmp = tup; - stack_pointer += -oparg; + /* Variables=['tup'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ + stack_pointer[-oparg] = tup; + /* Variables=['tup'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ + stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ - _tos = _tmp; + /* Variables=['tup'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } @@ -1725,9 +1511,6 @@ INSTRUCTION_STATS(CACHE); assert(0 && "Executing a cache."); Py_FatalError("Executing a cache."); - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -1750,17 +1533,11 @@ _PyStackRef res; // _SPECIALIZE_CALL { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -1769,13 +1546,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_Call(callable[0], next_instr, oparg + !PyStackRef_IsNull(self_or_null[0])); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(CALL); @@ -1785,7 +1555,7 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { @@ -1802,7 +1572,7 @@ } // _DO_CALL { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -1825,7 +1595,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -1850,7 +1620,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1900,7 +1670,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -1908,16 +1678,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1927,9 +1697,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -1955,11 +1728,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1967,55 +1737,28 @@ } // _CHECK_AND_ALLOCATE_OBJECT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t type_version = read_u32(&this_instr[2].cache); (void)args; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyStackRef_IsNull(self_or_null[0])) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!PyType_Check(callable_o)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyTypeObject *tp = (PyTypeObject *)callable_o; if (FT_ATOMIC_LOAD_UINT32_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2027,13 +1770,6 @@ PyFunctionObject *init_func = (PyFunctionObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(cls->_spec_cache.init); PyCodeObject *code = (PyCodeObject *)init_func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize + _Py_InitCleanup.co_framesize)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2054,7 +1790,7 @@ } // _CREATE_INIT_FRAME { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ self = self_or_null; init = callable; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2063,15 +1799,14 @@ stack_pointer = _PyFrame_GetStackPointer(frame); assert(_PyFrame_GetBytecode(shim)[0].op.code == EXIT_INIT_CHECK); assert(_PyFrame_GetBytecode(shim)[1].op.code == RETURN_VALUE); - shim->localsplus[0] = PyStackRef_NULL; - shim->localsplus[1] = PyStackRef_DUP(self[0]); + shim->localsplus[0] = PyStackRef_DUP(self[0]); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, init[0], NULL, args-1, oparg+1, NULL, shim); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FrameClearAndPop(tstate, shim); @@ -2084,7 +1819,7 @@ } // _PUSH_FRAME { - /* Variables=['init_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['init_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ new_frame = init_frame; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; @@ -2097,13 +1832,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ - _tos = _tmp; DISPATCH(); } @@ -2127,11 +1855,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2139,37 +1864,17 @@ } // _CHECK_CALL_BOUND_METHOD_EXACT_ARGS { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ if (!PyStackRef_IsNull(null[0])) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (Py_TYPE(PyStackRef_AsPyObjectBorrow(callable[0])) != &PyMethod_Type) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2177,7 +1882,7 @@ } // _INIT_CALL_BOUND_METHOD_EXACT_ARGS { - /* Variables=['callable'MLA, 'null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ self_or_null = null; assert(PyStackRef_IsNull(self_or_null[0])); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -2192,30 +1897,16 @@ // flush // _CHECK_FUNCTION_VERSION { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2223,19 +1914,12 @@ } // _CHECK_FUNCTION_EXACT_ARGS { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null[0]))) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2243,30 +1927,16 @@ } // _CHECK_STACK_SPACE { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (tstate->py_recursion_remaining <= 1) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2274,7 +1944,7 @@ } // _INIT_CALL_PY_EXACT_ARGS { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); @@ -2287,7 +1957,7 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-1 - oparg; sp=1; logical_sp=-oparg */ + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -2297,12 +1967,12 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-1 - oparg; sp=1; logical_sp=-oparg */ + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -2312,13 +1982,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ - _tos = _tmp; DISPATCH(); } @@ -2342,11 +2005,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2354,64 +2014,30 @@ } // _CHECK_METHOD_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (((PyFunctionObject *)func)->func_version != func_version) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!PyStackRef_IsNull(null[0])) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2419,7 +2045,7 @@ } // _EXPAND_METHOD { - /* Variables=['callable'MLA, 'null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ self_or_null = null; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyStackRef_IsNull(self_or_null[0])); @@ -2435,7 +2061,7 @@ // flush // _PY_FRAME_GENERAL { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -2454,7 +2080,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -2462,7 +2088,7 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -2472,7 +2098,7 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2484,13 +2110,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ - _tos = _tmp; DISPATCH(); } @@ -2514,28 +2133,15 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_CLASS { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyType_Check(callable_o)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2548,13 +2154,6 @@ total_args++; } if (tp->tp_vectorcall == NULL) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2578,7 +2177,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2601,7 +2200,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -2609,16 +2208,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2628,9 +2227,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -2654,19 +2256,13 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_FAST { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -2675,25 +2271,11 @@ total_args++; } if (!PyCFunction_CheckExact(callable_o)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (PyCFunction_GET_FLAGS(callable_o) != METH_FASTCALL) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2718,7 +2300,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2745,7 +2327,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -2753,16 +2335,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2772,9 +2354,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -2798,19 +2383,13 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_FAST_WITH_KEYWORDS { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -2819,25 +2398,11 @@ total_args++; } if (!PyCFunction_CheckExact(callable_o)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (PyCFunction_GET_FLAGS(callable_o) != (METH_FASTCALL | METH_KEYWORDS)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -2866,7 +2431,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2890,7 +2455,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -2898,16 +2463,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2917,9 +2482,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -2943,19 +2511,13 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_O { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -2963,49 +2525,21 @@ total_args++; } if (total_args != 1) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!PyCFunction_CheckExact(callable_o)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (PyCFunction_GET_FLAGS(callable_o) != METH_O) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (_Py_ReachedRecursionLimit(tstate)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3023,7 +2557,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3034,16 +2568,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3053,9 +2587,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -3083,24 +2620,19 @@ _PyStackRef result; // _MAKE_CALLARGS_A_TUPLE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - kwargs_in = _tos; - callargs = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + kwargs_in = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - func = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ + callargs = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + func = stack_pointer[-4]; + /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs); if (PyTuple_CheckExact(callargs_o)) { tuple = callargs; kwargs_out = kwargs_in; } else { - /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[0] = kwargs_in; - /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'ML]; base=-3; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'ML]; base=-3; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3116,20 +2648,20 @@ kwargs_out = kwargs_in; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func'ML, 'unused'M]; base=-3; sp=-1; logical_sp=-1 */ + /* Variables=['func'ML, 'unused'M]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs); stack_pointer = _PyFrame_GetStackPointer(frame); tuple = PyStackRef_FromPyObjectSteal(tuple_o); - stack_pointer += 1; + stack_pointer += 2; } } // _DO_CALL_FUNCTION_EX { - /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-3; sp=0; logical_sp=1 */ + /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ kwargs_st = kwargs_out; callargs_st = tuple; - null = stack_pointer[-2]; + null = stack_pointer[-3]; func_st = func; (void)null; PyObject *func = PyStackRef_AsPyObjectBorrow(func_st); @@ -3143,15 +2675,12 @@ assert(PyTuple_CheckExact(callargs)); PyObject *arg = PyTuple_GET_SIZE(callargs) > 0 ? PyTuple_GET_ITEM(callargs, 0) : &_PyInstrumentation_MISSING; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[-1] = callargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[0] = kwargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=1; logical_sp=1 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + stack_pointer[-2] = callargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + stack_pointer[-1] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-4; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -3196,9 +2725,9 @@ Py_ssize_t nargs = PyTuple_GET_SIZE(callargs); int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func)); - stack_pointer += -1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML]; base=-3; sp=-1; logical_sp=-1 */ + /* Variables=['func_st'ML, 'null'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex( tstate, func_st, locals, @@ -3206,7 +2735,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ + /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -3218,34 +2747,31 @@ assert(PyTuple_CheckExact(callargs)); PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st); assert(kwargs == NULL || PyDict_CheckExact(kwargs)); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[-1] = callargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[0] = kwargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=1; logical_sp=1 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + stack_pointer[-2] = callargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + stack_pointer[-1] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-4; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); result_o = PyObject_Call(func, callargs, kwargs); stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML]; base=-3; sp=0; logical_sp=0 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML]; base=-4; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(kwargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML]; base=-3; sp=-1; logical_sp=-1 */ + /* Variables=['func_st'ML, 'null'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ + /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(func_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3256,16 +2782,16 @@ } // _CHECK_PERIODIC { - /* Variables=['result'L]; base=-3; sp=-3; logical_sp=-2 */ + /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['result'L]; base=-3; sp=-3; logical_sp=-2 */ + /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer[0] = result; - /* Variables=['result'ML]; base=-3; sp=-3; logical_sp=-2 */ + /* Variables=['result'ML]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['result'ML]; base=-3; sp=-2; logical_sp=-2 */ + /* Variables=['result'ML]; base=-4; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3275,9 +2801,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = result; - _tos = _tmp; + /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ + stack_pointer[0] = result; + /* Variables=['result'ML]; base=-4; sp=-4; logical_sp=-3 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['result'ML]; base=-4; sp=-3; logical_sp=-3 */ DISPATCH(); } @@ -3292,20 +2821,15 @@ INSTRUCTION_STATS(CALL_INTRINSIC_1); _PyStackRef value; _PyStackRef res; - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg <= MAX_INTRINSIC_1); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_UnaryFunctions[oparg].func(tstate, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3313,9 +2837,12 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -3331,43 +2858,41 @@ _PyStackRef value2_st; _PyStackRef value1_st; _PyStackRef res; - value1_st = _tos; - value2_st = stack_pointer[-1]; + value1_st = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + value2_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ assert(oparg <= MAX_INTRINSIC_2); PyObject *value1 = PyStackRef_AsPyObjectBorrow(value1_st); PyObject *value2 = PyStackRef_AsPyObjectBorrow(value2_st); - /* Variables=['value2_st'ML, 'value1_st'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = value1_st; - /* Variables=['value2_st'ML, 'value1_st'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value2_st'ML, 'value1_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_BinaryFunctions[oparg].func(tstate, value2, value1); _PyStackRef tmp = value1_st; value1_st = PyStackRef_NULL; - /* Variables=['value2_st'ML, 'value1_st'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['value2_st'ML, 'value1_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = value1_st; - /* Variables=['value2_st'ML, 'value1_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['value2_st'ML, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = value2_st; value2_st = PyStackRef_NULL; - /* Variables=['value2_st'L, 'value1_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['value2_st'L, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = value2_st; - /* Variables=['value2_st'ML, 'value1_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['value2_st'ML, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -3389,18 +2914,12 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; @@ -3409,26 +2928,12 @@ total_args++; } if (total_args != 2) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.isinstance) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3447,9 +2952,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = callable; callable = res; - /* Variables=['callable'L, 'self_or_null'MLA, 'args'MLA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'L, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-2 - oparg] = callable; - /* Variables=['callable'ML, 'self_or_null'MLA, 'args'MLA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'ML, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -3462,13 +2967,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ - _PyStackRef _tmp; - _tmp = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -3494,31 +2993,19 @@ _PyStackRef res; // _SPECIALIZE_CALL_KW { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ - callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + self_or_null = &stack_pointer[-2 - oparg]; /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ + callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, '_tos'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, '_tos'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_CallKw(callable[0], next_instr, oparg + !PyStackRef_IsNull(self_or_null[0])); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(CALL_KW); @@ -3528,9 +3015,9 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - kwnames_in = _tos; - args = &stack_pointer[-oparg]; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ + kwnames_in = stack_pointer[-1]; + args = &stack_pointer[-1 - oparg]; (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -3539,24 +3026,17 @@ PyObject *method = ((PyMethodObject *)callable_o)->im_func; _PyStackRef temp = callable[0]; callable[0] = PyStackRef_FromPyObjectNew(method); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_in'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = kwnames_in; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_in'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_in'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; } kwnames_out = kwnames_in; } // _DO_CALL_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_out'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ kwnames = kwnames_out; - args = &stack_pointer[-oparg]; + args = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); int total_args = oparg; @@ -3572,12 +3052,9 @@ { int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ + stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( tstate, callable[0], locals, @@ -3586,7 +3063,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3602,9 +3079,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ + stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -3618,17 +3095,14 @@ callable[0] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -2 - oparg; + stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ JUMP_TO_LABEL(error); } - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ + stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall( callable_o, args_o, @@ -3662,9 +3136,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -3680,15 +3154,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ DISPATCH(); } @@ -3713,11 +3190,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -3725,42 +3199,30 @@ } // _CHECK_METHOD_VERSION_KW { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ - callable = &stack_pointer[-2 - oparg]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + null = &stack_pointer[-2 - oparg]; /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ + callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } if (((PyFunctionObject *)func)->func_version != func_version) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } if (!PyStackRef_IsNull(null[0])) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -3768,7 +3230,7 @@ } // _EXPAND_METHOD_KW { - /* Variables=['callable'MLA, 'null'MLA, 'unused'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + /* Variables=['callable'MLA, 'null'MLA, 'unused'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ self_or_null = null; assert(PyStackRef_IsNull(self_or_null[0])); _PyStackRef callable_s = callable[0]; @@ -3777,12 +3239,6 @@ self_or_null[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self); callable[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func); assert(PyStackRef_FunctionCheck(callable[0])); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, '_tos'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, '_tos'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable_s); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3790,8 +3246,8 @@ // flush // _PY_FRAME_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, '_tos'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ - kwnames = _tos; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ + kwnames = stack_pointer[-1]; args = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -3813,13 +3269,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -3827,7 +3283,7 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -3837,7 +3293,7 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3849,13 +3305,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-3 - oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ - _tos = _tmp; DISPATCH(); } @@ -3881,22 +3330,16 @@ /* Skip 2 cache entries */ // _CHECK_IS_NOT_PY_CALLABLE_KW { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } if (Py_TYPE(callable_o) == &PyMethod_Type) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -3904,10 +3347,10 @@ } // _CALL_KW_NON_PY { - /* Variables=['callable'MLA, 'unused'MA, 'unused'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - kwnames = _tos; - args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=['callable'MLA, 'unused'MA, 'unused'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ + kwnames = stack_pointer[-1]; + args = &stack_pointer[-1 - oparg]; + self_or_null = &stack_pointer[-2 - oparg]; #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif @@ -3923,9 +3366,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ + stack_pointer[-1] = kwnames; + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -3939,19 +3382,13 @@ callable[0] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -2 - oparg; + stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ JUMP_TO_LABEL(error); } PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames_o); - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall( callable_o, args_o, @@ -3960,7 +3397,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3982,7 +3419,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -3990,16 +3427,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4009,9 +3446,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ DISPATCH(); } @@ -4035,11 +3475,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -4047,24 +3484,18 @@ } // _CHECK_FUNCTION_VERSION_KW { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -4072,10 +3503,10 @@ } // _PY_FRAME_KW { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA, '_tos'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - kwnames = _tos; - args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ + kwnames = stack_pointer[-1]; + args = &stack_pointer[-1 - oparg]; + self_or_null = &stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -4088,12 +3519,6 @@ assert(Py_TYPE(callable_o) == &PyFunction_Type); int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, callable[0], locals, @@ -4102,13 +3527,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ + /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -4116,7 +3541,7 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -4126,7 +3551,7 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4138,13 +3563,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-3 - oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ - _tos = _tmp; DISPATCH(); } @@ -4166,18 +3584,12 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -4185,26 +3597,12 @@ total_args++; } if (total_args != 1) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.len) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4228,15 +3626,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; - DISPATCH(); + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + DISPATCH(); } TARGET(CALL_LIST_APPEND) { @@ -4256,36 +3657,28 @@ _PyStackRef arg; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - arg = _tos; - self = stack_pointer[-1]; + arg = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - callable = stack_pointer[-2]; + self = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + callable = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ assert(oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *self_o = PyStackRef_AsPyObjectBorrow(self); PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.list_append) { - _PyStackRef _tmp; - _tmp = arg; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } assert(self_o != NULL); if (!PyList_Check(self_o)) { - _PyStackRef _tmp; - _tmp = arg; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!LOCK_OBJECT(self_o)) { - _PyStackRef _tmp; - _tmp = arg; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4293,15 +3686,15 @@ STAT_INC(CALL, hit); int err = _PyList_AppendTakeRef((PyListObject *)self_o, PyStackRef_AsPyObjectSteal(arg)); UNLOCK_OBJECT(self_o); - stack_pointer += -1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML]; base=-2; sp=-1; logical_sp=-1 */ + /* Variables=['callable'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4313,13 +3706,6 @@ assert(next_instr->op.code == POP_TOP); SKIP_OVER(1); #endif - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-3; sp=-2; logical_sp=-3 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ - _tos = _tmp; DISPATCH(); } @@ -4343,19 +3729,13 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_FAST { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -4365,39 +3745,18 @@ } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_FASTCALL) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]); if (!Py_IS_TYPE(self, method->d_common.d_type)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4422,7 +3781,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4448,7 +3807,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -4456,16 +3815,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4475,9 +3834,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -4501,19 +3863,13 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -4523,26 +3879,12 @@ } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != (METH_FASTCALL|METH_KEYWORDS)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4550,13 +3892,6 @@ PyTypeObject *d_type = method->d_common.d_type; PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]); if (!Py_IS_TYPE(self, d_type)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4581,7 +3916,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4607,7 +3942,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -4615,16 +3950,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4634,9 +3969,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -4660,19 +3998,13 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_NOARGS { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ assert(oparg == 0 || oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -4681,26 +4013,12 @@ total_args++; } if (total_args != 1) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4709,37 +4027,16 @@ _PyStackRef self_stackref = args[0]; PyObject *self = PyStackRef_AsPyObjectBorrow(self_stackref); if (!Py_IS_TYPE(self, method->d_common.d_type)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (meth->ml_flags != METH_NOARGS) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (_Py_ReachedRecursionLimit(tstate)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4756,7 +4053,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4767,16 +4064,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4786,9 +4083,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -4812,19 +4112,13 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_O { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -4834,50 +4128,22 @@ } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (total_args != 2) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_O) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (_Py_ReachedRecursionLimit(tstate)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4886,13 +4152,6 @@ _PyStackRef self_stackref = arguments[0]; if (!Py_IS_TYPE(PyStackRef_AsPyObjectBorrow(self_stackref), method->d_common.d_type)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -4922,7 +4181,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -4930,16 +4189,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4949,9 +4208,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -4976,36 +4238,16 @@ /* Skip 2 cache entries */ // _CHECK_IS_NOT_PY_CALLABLE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (Py_TYPE(callable_o) == &PyMethod_Type) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -5013,7 +4255,7 @@ } // _CALL_NON_PY_GENERAL { - /* Variables=['callable'MLA, 'unused'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'unused'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; self_or_null = &stack_pointer[-1 - oparg]; #if TIER_ONE @@ -5044,7 +4286,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5071,7 +4313,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -5079,16 +4321,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5098,9 +4340,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -5123,11 +4368,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -5135,38 +4377,18 @@ } // _CHECK_FUNCTION_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -5174,20 +4396,13 @@ } // _CHECK_FUNCTION_EXACT_ARGS { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ self_or_null = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null[0]))) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -5195,30 +4410,16 @@ } // _CHECK_STACK_SPACE { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (tstate->py_recursion_remaining <= 1) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -5226,7 +4427,7 @@ } // _INIT_CALL_PY_EXACT_ARGS { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; self_or_null = &stack_pointer[-1 - oparg]; int has_self = !PyStackRef_IsNull(self_or_null[0]); @@ -5240,7 +4441,7 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-1 - oparg; sp=1; logical_sp=-oparg */ + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -5250,12 +4451,12 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-1 - oparg; sp=1; logical_sp=-oparg */ + /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -5265,13 +4466,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ - _tos = _tmp; DISPATCH(); } @@ -5294,11 +4488,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -5306,38 +4497,18 @@ } // _CHECK_FUNCTION_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -5345,7 +4516,7 @@ } // _PY_FRAME_GENERAL { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; self_or_null = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -5365,7 +4536,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -5373,7 +4544,7 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -5383,7 +4554,7 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5395,13 +4566,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-2 - oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ - _tos = _tmp; DISPATCH(); } @@ -5425,44 +4589,33 @@ /* Skip 2 cache entries */ // _CALL_STR_1 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - arg = _tos; - null = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + arg = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - callable = stack_pointer[-2]; + null = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + callable = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); if (!PyStackRef_IsNull(null)) { - _PyStackRef _tmp; - _tmp = arg; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (callable_o != (PyObject *)&PyUnicode_Type) { - _PyStackRef _tmp; - _tmp = arg; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } STAT_INC(CALL, hit); - /* Variables=['callable'ML, 'null'ML, 'arg'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = arg; - /* Variables=['callable'ML, 'null'ML, 'arg'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML, 'null'ML, 'arg'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Str(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5473,16 +4626,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5492,9 +4645,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } @@ -5518,44 +4674,33 @@ /* Skip 2 cache entries */ // _CALL_TUPLE_1 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - arg = _tos; - null = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + arg = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - callable = stack_pointer[-2]; + null = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + callable = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); if (!PyStackRef_IsNull(null)) { - _PyStackRef _tmp; - _tmp = arg; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (callable_o != (PyObject *)&PyTuple_Type) { - _PyStackRef _tmp; - _tmp = arg; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } STAT_INC(CALL, hit); - /* Variables=['callable'ML, 'null'ML, 'arg'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = arg; - /* Variables=['callable'ML, 'null'ML, 'arg'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML, 'null'ML, 'arg'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PySequence_Tuple(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5566,16 +4711,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5585,9 +4730,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } @@ -5609,47 +4757,36 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - arg = _tos; - null = stack_pointer[-1]; + arg = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - callable = stack_pointer[-2]; + null = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + callable = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); if (!PyStackRef_IsNull(null)) { - _PyStackRef _tmp; - _tmp = arg; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } if (callable_o != (PyObject *)&PyType_Type) { - _PyStackRef _tmp; - _tmp = arg; - _tos = _tmp; UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } STAT_INC(CALL, hit); res = PyStackRef_FromPyObjectNew(Py_TYPE(arg_o)); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ - stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ - stack_pointer += -1; + /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ + stack_pointer[-3] = res; + /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ + /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -5666,17 +4803,12 @@ _PyStackRef match_type_st; _PyStackRef rest; _PyStackRef match; - match_type_st = _tos; - exc_value_st = stack_pointer[-1]; + match_type_st = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + exc_value_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); PyObject *match_type = PyStackRef_AsPyObjectBorrow(match_type_st); - /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = match_type_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyEval_CheckExceptStarTypeValid(tstate, match_type); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5684,20 +4816,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; - /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match_type_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; - /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = exc_value_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_LABEL(error); } PyObject *match_o = NULL; @@ -5707,20 +4839,20 @@ &match_o, &rest_o); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; - /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match_type_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; - /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = exc_value_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_LABEL(error); } @@ -5735,15 +4867,15 @@ } rest = PyStackRef_FromPyObjectSteal(rest_o); match = PyStackRef_FromPyObjectSteal(match_o); - _PyStackRef _tmp; - _tmp = match; - /* Variables=['rest'L]; base=-1; sp=-1; logical_sp=0 */ + /* Variables=['rest'L, 'match'L]; base=-2; sp=-2; logical_sp=0 */ stack_pointer[0] = rest; - /* Variables=['rest'ML]; base=-1; sp=-1; logical_sp=0 */ - stack_pointer += 1; + /* Variables=['rest'ML, 'match'L]; base=-2; sp=-2; logical_sp=0 */ + /* Variables=['rest'ML, 'match'L]; base=-2; sp=-2; logical_sp=0 */ + stack_pointer[1] = match; + /* Variables=['rest'ML, 'match'ML]; base=-2; sp=-2; logical_sp=0 */ + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['rest'ML]; base=-1; sp=0; logical_sp=0 */ - _tos = _tmp; + /* Variables=['rest'ML, 'match'ML]; base=-2; sp=0; logical_sp=0 */ DISPATCH(); } @@ -5759,18 +4891,13 @@ _PyStackRef left; _PyStackRef right; _PyStackRef b; - right = _tos; - left = stack_pointer[-1]; + right = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyExceptionInstance_Check(left_o)); - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyEval_CheckExceptTypeValid(tstate, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5782,14 +4909,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['left'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(right); stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; - _PyStackRef _tmp; - _tmp = b; - _tos = _tmp; + /* Variables=['left'ML, 'b'L]; base=-2; sp=-1; logical_sp=0 */ + stack_pointer[0] = b; + /* Variables=['left'ML, 'b'ML]; base=-2; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['left'ML, 'b'ML]; base=-2; sp=0; logical_sp=0 */ DISPATCH(); } @@ -5809,22 +4939,17 @@ _PyStackRef exc_value_st; _PyStackRef none; _PyStackRef value; - exc_value_st = _tos; - last_sent_val = stack_pointer[-1]; + exc_value_st = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - sub_iter = stack_pointer[-2]; + last_sent_val = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + sub_iter = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); #if !Py_TAIL_CALL_INTERP assert(throwflag); #endif assert(exc_value && PyExceptionInstance_Check(exc_value)); - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = exc_value_st; - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopIteration); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5833,26 +4958,26 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = sub_iter; sub_iter = value; - /* Variables=['sub_iter'L, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['sub_iter'L, 'last_sent_val'ML, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = sub_iter; - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'L]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = exc_value_st; - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = last_sent_val; last_sent_val = PyStackRef_NULL; - /* Variables=['sub_iter'ML, 'last_sent_val'L, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['sub_iter'ML, 'last_sent_val'L, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = last_sent_val; - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ none = PyStackRef_None; } else { @@ -5861,15 +4986,15 @@ monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } - _PyStackRef _tmp; - _tmp = value; - /* Variables=['none'L]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['none'L, 'value'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[0] = none; - /* Variables=['none'ML]; base=-2; sp=-2; logical_sp=-1 */ - stack_pointer += 1; + /* Variables=['none'ML, 'value'L]; base=-3; sp=-3; logical_sp=-1 */ + /* Variables=['none'ML, 'value'L]; base=-3; sp=-3; logical_sp=-1 */ + stack_pointer[1] = value; + /* Variables=['none'ML, 'value'ML]; base=-3; sp=-3; logical_sp=-1 */ + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['none'ML]; base=-2; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['none'ML, 'value'ML]; base=-3; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -5890,30 +5015,19 @@ _PyStackRef res; // _SPECIALIZE_COMPARE_OP { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - right = _tos; - left = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + right = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_CompareOp(left, right, next_instr, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = right; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML]; base=-1; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(COMPARE_OP); @@ -5922,34 +5036,28 @@ } // _COMPARE_OP { - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert((oparg >> 5) <= Py_GE); - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_RichCompare(left_o, right_o, oparg >> 5); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -5967,9 +5075,12 @@ res = PyStackRef_FromPyObjectSteal(res_o); } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -5991,13 +5102,11 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -6005,16 +5114,13 @@ } // _GUARD_NOS_FLOAT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; - left = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -6023,7 +5129,7 @@ /* Skip 1 cache entry */ // _COMPARE_OP_FLOAT { - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); STAT_INC(COMPARE_OP, hit); @@ -6034,12 +5140,12 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; } - _PyStackRef _tmp; - _tmp = res; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -6061,13 +5167,11 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -6075,16 +5179,13 @@ } // _GUARD_NOS_INT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; - left = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -6093,21 +5194,15 @@ /* Skip 1 cache entry */ // _COMPARE_OP_INT { - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); } if (!_PyLong_IsCompact((PyLongObject *)right_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -6122,12 +5217,12 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; } - _PyStackRef _tmp; - _tmp = res; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -6151,13 +5246,11 @@ _PyStackRef res; // _GUARD_TOS_UNICODE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -6165,16 +5258,13 @@ } // _GUARD_NOS_UNICODE { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ tos = value; - nos = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + nos = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { - _PyStackRef _tmp; - _tmp = tos; - _tos = _tmp; UPDATE_MISS_STATS(COMPARE_OP); assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP)); JUMP_TO_PREDICTED(COMPARE_OP); @@ -6183,7 +5273,7 @@ /* Skip 1 cache entry */ // _COMPARE_OP_STR { - /* Variables=['nos'ML, 'tos'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['nos'ML, 'tos'ML]; base=-2; sp=0; logical_sp=0 */ right = tos; left = nos; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -6198,12 +5288,12 @@ assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; } - _PyStackRef _tmp; - _tmp = res; + /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = res; + /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -6224,28 +5314,17 @@ _PyStackRef b; // _SPECIALIZE_CONTAINS_OP { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - right = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + right = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['left'M, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'M, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'M, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_ContainsOp(right, next_instr); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = right; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'M]; base=-1; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(CONTAINS_OP); @@ -6254,42 +5333,39 @@ } // _CONTAINS_OP { - /* Variables=['left'M, 'right'L]; base=-1; sp=0; logical_sp=1 */ - left = stack_pointer[-1]; + /* Variables=['left'M, 'right'ML]; base=-2; sp=0; logical_sp=0 */ + left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = PySequence_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_LABEL(error); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; } - _PyStackRef _tmp; - _tmp = b; - _tos = _tmp; + /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = b; + /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -6309,51 +5385,46 @@ _PyStackRef right; _PyStackRef b; /* Skip 1 cache entry */ - right = _tos; - left = stack_pointer[-1]; + right = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!PyDict_CheckExact(right_o)) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(CONTAINS_OP); assert(_PyOpcode_Deopt[opcode] == (CONTAINS_OP)); JUMP_TO_PREDICTED(CONTAINS_OP); } STAT_INC(CONTAINS_OP, hit); - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = PyDict_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_LABEL(error); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - _PyStackRef _tmp; - _tmp = b; - _tos = _tmp; + /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = b; + /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -6373,51 +5444,46 @@ _PyStackRef right; _PyStackRef b; /* Skip 1 cache entry */ - right = _tos; - left = stack_pointer[-1]; + right = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!(PySet_CheckExact(right_o) || PyFrozenSet_CheckExact(right_o))) { - _PyStackRef _tmp; - _tmp = right; - _tos = _tmp; UPDATE_MISS_STATS(CONTAINS_OP); assert(_PyOpcode_Deopt[opcode] == (CONTAINS_OP)); JUMP_TO_PREDICTED(CONTAINS_OP); } STAT_INC(CONTAINS_OP, hit); - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PySet_Contains((PySetObject *)right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_LABEL(error); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - _PyStackRef _tmp; - _tmp = b; - _tos = _tmp; + /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = b; + /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -6432,22 +5498,17 @@ INSTRUCTION_STATS(CONVERT_VALUE); _PyStackRef value; _PyStackRef result; - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ conversion_func conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = _PyEval_ConversionFuncs[oparg]; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *result_o = conv_fn(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6455,9 +5516,12 @@ JUMP_TO_LABEL(error); } result = PyStackRef_FromPyObjectSteal(result_o); - _PyStackRef _tmp; - _tmp = result; - _tos = _tmp; + /* Variables=['result'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = result; + /* Variables=['result'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['result'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -6472,19 +5536,16 @@ INSTRUCTION_STATS(COPY); _PyStackRef bottom; _PyStackRef top; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ bottom = stack_pointer[-1 - (oparg-1)]; - /* Variables=[]; base=-(oparg-1); sp=1; logical_sp=-(oparg-1) */ + /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ assert(oparg > 0); top = PyStackRef_DUP(bottom); - _PyStackRef _tmp; - _tmp = top; - _tos = _tmp; + /* Variables=['bottom'ML, 'unused'MA, 'top'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ + stack_pointer[0] = top; + /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ DISPATCH(); } @@ -6507,9 +5568,6 @@ PyObject *o = PyTuple_GET_ITEM(closure, i); frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); } - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -6523,33 +5581,21 @@ next_instr += 1; INSTRUCTION_STATS(DELETE_ATTR); _PyStackRef owner; - owner = _tos; + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -6565,32 +5611,14 @@ PyObject *cell = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *oldobj = PyCell_SwapTakeRef((PyCellObject *)cell, NULL); if (oldobj == NULL) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(oldobj); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -6605,12 +5633,6 @@ INSTRUCTION_STATS(DELETE_FAST); _PyStackRef v = GETLOCAL(oparg); if (PyStackRef_IsNull(v)) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcCheckArg(tstate, PyExc_UnboundLocalError, UNBOUNDLOCAL_ERROR_MSG, @@ -6621,21 +5643,9 @@ } _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_NULL; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -6649,12 +5659,6 @@ next_instr += 1; INSTRUCTION_STATS(DELETE_GLOBAL); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_Pop(GLOBALS(), name, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6668,12 +5672,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -6690,24 +5688,12 @@ PyObject *ns = LOCALS(); int err; if (ns == NULL) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_SystemError, "no locals when deleting %R", name); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_DelItem(ns, name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6719,12 +5705,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -6739,44 +5719,32 @@ INSTRUCTION_STATS(DELETE_SUBSCR); _PyStackRef container; _PyStackRef sub; - sub = _tos; - container = stack_pointer[-1]; + sub = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - /* Variables=['container'ML, 'sub'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = sub; - /* Variables=['container'ML, 'sub'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['container'ML, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ + container = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; - /* Variables=['container'ML, 'sub'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['container'ML, 'sub'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub; - /* Variables=['container'ML, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; - /* Variables=['container'L, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['container'L, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = container; - /* Variables=['container'ML, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (err) { JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -6792,20 +5760,15 @@ _PyStackRef callable; _PyStackRef dict; _PyStackRef update; - update = _tos; - dict = stack_pointer[-1 - (oparg - 1)]; - /* Variables=[]; base=-1 - (oparg - 1); sp=0; logical_sp=-1 - (oparg - 1) */ - callable = stack_pointer[-4 - (oparg - 1)]; - /* Variables=[]; base=-4 - (oparg - 1); sp=0; logical_sp=-4 - (oparg - 1) */ + update = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + dict = stack_pointer[-2 - (oparg - 1)]; + /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ + callable = stack_pointer[-5 - (oparg - 1)]; + /* Variables=[]; base=-5 - (oparg - 1); sp=0; logical_sp=-5 - (oparg - 1) */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); - /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA, 'update'L]; base=-4 - (oparg - 1); sp=0; logical_sp=1 */ - stack_pointer[0] = update; - /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA, 'update'ML]; base=-4 - (oparg - 1); sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA, 'update'ML]; base=-4 - (oparg - 1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_MergeEx(dict_o, update_o, 2); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6815,7 +5778,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-4 - (oparg - 1); sp=0; logical_sp=0 */ + /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6823,17 +5786,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-4 - (oparg - 1); sp=0; logical_sp=0 */ + /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -6848,17 +5804,12 @@ INSTRUCTION_STATS(DICT_UPDATE); _PyStackRef dict; _PyStackRef update; - update = _tos; - dict = stack_pointer[-1 - (oparg - 1)]; - /* Variables=[]; base=-1 - (oparg - 1); sp=0; logical_sp=-1 - (oparg - 1) */ + update = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + dict = stack_pointer[-2 - (oparg - 1)]; + /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); - /* Variables=['dict'ML, 'unused'MA, 'update'L]; base=-1 - (oparg - 1); sp=0; logical_sp=1 */ - stack_pointer[0] = update; - /* Variables=['dict'ML, 'unused'MA, 'update'ML]; base=-1 - (oparg - 1); sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict'ML, 'unused'MA, 'update'ML]; base=-1 - (oparg - 1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_Update(dict_o, update_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6875,7 +5826,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict'ML, 'unused'MA]; base=-1 - (oparg - 1); sp=0; logical_sp=0 */ + /* Variables=['dict'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6883,17 +5834,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict'ML, 'unused'MA]; base=-1 - (oparg - 1); sp=0; logical_sp=0 */ + /* Variables=['dict'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -6910,19 +5854,14 @@ INSTRUCTION_STATS(END_ASYNC_FOR); _PyStackRef awaitable_st; _PyStackRef exc_st; - exc_st = _tos; - awaitable_st = stack_pointer[-1]; + exc_st = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + awaitable_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ JUMPBY(0); (void)oparg; PyObject *exc = PyStackRef_AsPyObjectBorrow(exc_st); assert(exc && PyExceptionInstance_Check(exc)); - /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = exc_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6930,20 +5869,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = exc_st; exc_st = PyStackRef_NULL; - /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = exc_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = awaitable_st; awaitable_st = PyStackRef_NULL; - /* Variables=['awaitable_st'L, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['awaitable_st'L, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = awaitable_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ } else { Py_INCREF(exc); @@ -6952,13 +5891,6 @@ monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -6971,17 +5903,14 @@ next_instr += 1; INSTRUCTION_STATS(END_FOR); _PyStackRef value; - value = _tos; - _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(value); - stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; + value = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + _PyFrame_SetStackPointer(frame, stack_pointer); + PyStackRef_CLOSE(value); + stack_pointer = _PyFrame_GetStackPointer(frame); DISPATCH(); } @@ -6997,23 +5926,21 @@ _PyStackRef receiver; _PyStackRef value; _PyStackRef val; - value = _tos; - receiver = stack_pointer[-1]; + value = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + receiver = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)receiver; val = value; - /* Variables=['val'L]; base=-1; sp=0; logical_sp=0 */ - stack_pointer[-1] = val; - /* Variables=['val'ML]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['val'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = val; + /* Variables=['val'ML]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(receiver); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = val; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -7042,9 +5969,7 @@ next_instr = this_instr; if (_PyOpcode_Caches[_PyOpcode_Deopt[opcode]]) { PAUSE_ADAPTIVE_COUNTER(this_instr[1].counter); - }_PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; + } DISPATCH_GOTO(); } tstate->previous_executor = Py_None; @@ -7053,9 +5978,6 @@ #else Py_FatalError("ENTER_EXECUTOR is not supported in this build"); #endif /* _Py_TIER2 */ - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -7069,14 +5991,9 @@ next_instr += 1; INSTRUCTION_STATS(EXIT_INIT_CHECK); _PyStackRef should_be_none; - should_be_none = _tos; + should_be_none = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_IsNone(should_be_none)) { - /* Variables=['should_be_none'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = should_be_none; - /* Variables=['should_be_none'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['should_be_none'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyErr_Format(PyExc_TypeError, "__init__() should return None, not '%.200s'", @@ -7084,13 +6001,9 @@ stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -7107,9 +6020,7 @@ assert(oparg); opcode = next_instr->op.code; oparg = oparg << 8 | next_instr->op.arg; - PRE_DISPATCH_GOTO();_PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; + PRE_DISPATCH_GOTO(); DISPATCH_GOTO(); } @@ -7124,21 +6035,16 @@ INSTRUCTION_STATS(FORMAT_SIMPLE); _PyStackRef value; _PyStackRef res; - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(value_o, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7149,10 +6055,14 @@ } else { res = value; + stack_pointer += -1; } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -7168,40 +6078,38 @@ _PyStackRef value; _PyStackRef fmt_spec; _PyStackRef res; - fmt_spec = _tos; - value = stack_pointer[-1]; + fmt_spec = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - /* Variables=['value'ML, 'fmt_spec'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = fmt_spec; - /* Variables=['value'ML, 'fmt_spec'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML, 'fmt_spec'ML]; base=-1; sp=1; logical_sp=1 */ + value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(PyStackRef_AsPyObjectBorrow(value), PyStackRef_AsPyObjectBorrow(fmt_spec)); _PyStackRef tmp = fmt_spec; fmt_spec = PyStackRef_NULL; - /* Variables=['value'ML, 'fmt_spec'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['value'ML, 'fmt_spec'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = fmt_spec; - /* Variables=['value'ML, 'fmt_spec'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['value'ML, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = value; value = PyStackRef_NULL; - /* Variables=['value'L, 'fmt_spec'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['value'L, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = value; - /* Variables=['value'ML, 'fmt_spec'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['value'ML, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -7221,28 +6129,17 @@ _PyStackRef next; // _SPECIALIZE_FOR_ITER { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - iter = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_ForIter(iter, next_instr, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = iter; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(FOR_ITER); @@ -7251,14 +6148,8 @@ } // _FOR_ITER { - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7277,19 +6168,17 @@ } assert(next_instr[oparg].op.code == END_FOR || next_instr[oparg].op.code == INSTRUMENTED_END_FOR); - JUMPBY(oparg + 1);_PyStackRef _tmp; - _tmp = iter; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; + JUMPBY(oparg + 1); DISPATCH(); } next = PyStackRef_FromPyObjectSteal(next_o); } - _PyStackRef _tmp; - _tmp = next; - _tos = _tmp; + /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = next; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -7311,11 +6200,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -7323,31 +6209,23 @@ } // _FOR_ITER_GEN_FRAME { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - iter = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(gen) != &PyGen_Type) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)gen)) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #endif if (gen->gi_frame_state >= FRAME_EXECUTING) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -7363,16 +6241,10 @@ } // _PUSH_FRAME { - /* Variables=['iter'L, 'gen_frame'L]; base=0; sp=0; logical_sp=2 */ + /* Variables=['iter'ML, 'gen_frame'L]; base=-1; sp=0; logical_sp=1 */ new_frame = gen_frame; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -7382,13 +6254,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -7409,22 +6274,17 @@ /* Skip 1 cache entry */ // _ITER_CHECK_LIST { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - iter = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyListIter_Type) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced(iter_o)) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -7432,9 +6292,6 @@ _PyListIterObject *it = (_PyListIterObject *)iter_o; if (!_Py_IsOwnedByCurrentThread((PyObject *)it->it_seq) || !_PyObject_GC_IS_SHARED(it->it_seq)) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -7443,7 +6300,7 @@ } // _ITER_JUMP_LIST { - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(iter_o) == &PyListIter_Type); #ifdef Py_GIL_DISABLED @@ -7457,27 +6314,18 @@ it->it_index = -1; if (seq != NULL) { it->it_seq = NULL; - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(seq); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; } - JUMPBY(oparg + 1);_PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; + JUMPBY(oparg + 1); DISPATCH(); } #endif } // _ITER_NEXT_LIST { - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyListIterObject *it = (_PyListIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyListIter_Type); @@ -7488,49 +6336,31 @@ assert(_Py_IsOwnedByCurrentThread((PyObject *)seq) || _PyObject_GC_IS_SHARED(seq)); STAT_INC(FOR_ITER, hit); - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int result = _PyList_GetItemRefNoLock(seq, it->it_index, &next); stack_pointer = _PyFrame_GetStackPointer(frame); if (result < 0) { - _PyStackRef _tmp; - _tmp = iter; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } if (result == 0) { it->it_index = -1; - JUMPBY(oparg + 1);_PyStackRef _tmp; - _tmp = iter; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; + JUMPBY(oparg + 1); DISPATCH(); } it->it_index++; #else assert(it->it_index < PyList_GET_SIZE(seq)); next = PyStackRef_FromPyObjectNew(PyList_GET_ITEM(seq, it->it_index++)); - stack_pointer += 1; #endif } - _PyStackRef _tmp; - _tmp = next; - /* Variables=['iter'L]; base=0; sp=1; logical_sp=1 */ - stack_pointer[-1] = iter; - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = next; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -7551,22 +6381,17 @@ /* Skip 1 cache entry */ // _ITER_CHECK_RANGE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - iter = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -7575,7 +6400,7 @@ } // _ITER_JUMP_RANGE { - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); #ifdef Py_GIL_DISABLED @@ -7583,15 +6408,13 @@ #endif STAT_INC(FOR_ITER, hit); if (r->len <= 0) { - JUMPBY(oparg + 1);_PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; + JUMPBY(oparg + 1); DISPATCH(); } } // _ITER_NEXT_RANGE { - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); #ifdef Py_GIL_DISABLED @@ -7603,25 +6426,16 @@ r->len--; PyObject *res = PyLong_FromLong(value); if (res == NULL) { - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ JUMP_TO_LABEL(error); } next = PyStackRef_FromPyObjectSteal(res); } - _PyStackRef _tmp; - _tmp = next; - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = next; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -7642,22 +6456,17 @@ /* Skip 1 cache entry */ // _ITER_CHECK_TUPLE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - iter = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTupleIter_Type) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced(iter_o)) { - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); JUMP_TO_PREDICTED(FOR_ITER); @@ -7666,7 +6475,7 @@ } // _ITER_JUMP_TUPLE { - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); (void)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -7680,28 +6489,19 @@ #ifndef Py_GIL_DISABLED if (seq != NULL) { it->it_seq = NULL; - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(seq); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; } #endif - JUMPBY(oparg + 1);_PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; + JUMPBY(oparg + 1); DISPATCH(); } } // _ITER_NEXT_TUPLE { - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyTupleIterObject *it = (_PyTupleIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -7713,15 +6513,12 @@ assert(it->it_index < PyTuple_GET_SIZE(seq)); next = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq, it->it_index++)); } - _PyStackRef _tmp; - _tmp = next; - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = next; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -7736,7 +6533,8 @@ INSTRUCTION_STATS(GET_AITER); _PyStackRef obj; _PyStackRef iter; - obj = _tos; + obj = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ unaryfunc getter = NULL; PyObject *obj_o = PyStackRef_AsPyObjectBorrow(obj); PyObject *iter_o; @@ -7745,12 +6543,6 @@ getter = type->tp_as_async->am_aiter; } if (getter == NULL) { - /* Variables=['obj'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = obj; - /* Variables=['obj'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['obj'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_TypeError, "'async for' requires an object with " @@ -7759,24 +6551,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - /* Variables=['obj'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = obj; - /* Variables=['obj'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['obj'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); iter_o = (*getter)(obj_o); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7795,9 +6581,12 @@ JUMP_TO_LABEL(error); } iter = PyStackRef_FromPyObjectSteal(iter_o); - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; + /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -7812,13 +6601,8 @@ INSTRUCTION_STATS(GET_ANEXT); _PyStackRef aiter; _PyStackRef awaitable; - aiter = _tos; - /* Variables=['aiter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = aiter; - /* Variables=['aiter'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['aiter'ML]; base=0; sp=1; logical_sp=1 */ + aiter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *awaitable_o = _PyEval_GetANext(PyStackRef_AsPyObjectBorrow(aiter)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7826,9 +6610,12 @@ JUMP_TO_LABEL(error); } awaitable = PyStackRef_FromPyObjectSteal(awaitable_o); - _PyStackRef _tmp; - _tmp = awaitable; - _tos = _tmp; + /* Variables=['aiter'ML, 'awaitable'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = awaitable; + /* Variables=['aiter'ML, 'awaitable'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['aiter'ML, 'awaitable'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -7843,19 +6630,14 @@ INSTRUCTION_STATS(GET_AWAITABLE); _PyStackRef iterable; _PyStackRef iter; - iterable = _tos; - /* Variables=['iterable'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iterable; - /* Variables=['iterable'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ + iterable = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7863,9 +6645,12 @@ JUMP_TO_LABEL(error); } iter = PyStackRef_FromPyObjectSteal(iter_o); - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; + /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -7880,19 +6665,14 @@ INSTRUCTION_STATS(GET_ITER); _PyStackRef iterable; _PyStackRef iter; - iterable = _tos; - /* Variables=['iterable'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iterable; - /* Variables=['iterable'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ + iterable = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7900,9 +6680,12 @@ JUMP_TO_LABEL(error); } iter = PyStackRef_FromPyObjectSteal(iter_o); - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; + /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = iter; + /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -7917,13 +6700,8 @@ INSTRUCTION_STATS(GET_LEN); _PyStackRef obj; _PyStackRef len; - obj = _tos; - /* Variables=['obj'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = obj; - /* Variables=['obj'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['obj'ML]; base=0; sp=1; logical_sp=1 */ + obj = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_ssize_t len_i = PyObject_Length(PyStackRef_AsPyObjectBorrow(obj)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7935,9 +6713,12 @@ JUMP_TO_LABEL(error); } len = PyStackRef_FromPyObjectSteal(len_o); - _PyStackRef _tmp; - _tmp = len; - _tos = _tmp; + /* Variables=['obj'ML, 'len'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = len; + /* Variables=['obj'ML, 'len'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['obj'ML, 'len'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -7952,16 +6733,11 @@ INSTRUCTION_STATS(GET_YIELD_FROM_ITER); _PyStackRef iterable; _PyStackRef iter; - iterable = _tos; + iterable = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); if (PyCoro_CheckExact(iterable_o)) { if (!(_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE))) { - /* Variables=['iterable'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iterable; - /* Variables=['iterable'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetString(tstate, PyExc_TypeError, "cannot 'yield from' a coroutine object " @@ -7975,12 +6751,6 @@ iter = iterable; } else { - /* Variables=['iterable'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iterable; - /* Variables=['iterable'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(iterable_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7991,16 +6761,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = iterable; iterable = iter; - /* Variables=['iterable'L]; base=0; sp=1; logical_sp=1 */ + /* Variables=['iterable'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iterable; - /* Variables=['iterable'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['iterable'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; } - _PyStackRef _tmp; - _tmp = iter; - _tos = _tmp; + /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = iter; + /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -8015,14 +6784,9 @@ INSTRUCTION_STATS(IMPORT_FROM); _PyStackRef from; _PyStackRef res; - from = _tos; + from = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - /* Variables=['from'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = from; - /* Variables=['from'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['from'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportFrom(tstate, PyStackRef_AsPyObjectBorrow(from), name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8030,9 +6794,12 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['from'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = res; + /* Variables=['from'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['from'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -8048,43 +6815,41 @@ _PyStackRef level; _PyStackRef fromlist; _PyStackRef res; - fromlist = _tos; - level = stack_pointer[-1]; + fromlist = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + level = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - /* Variables=['level'ML, 'fromlist'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = fromlist; - /* Variables=['level'ML, 'fromlist'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['level'ML, 'fromlist'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportName(tstate, frame, name, PyStackRef_AsPyObjectBorrow(fromlist), PyStackRef_AsPyObjectBorrow(level)); _PyStackRef tmp = fromlist; fromlist = PyStackRef_NULL; - /* Variables=['level'ML, 'fromlist'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['level'ML, 'fromlist'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = fromlist; - /* Variables=['level'ML, 'fromlist'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['level'ML, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = level; level = PyStackRef_NULL; - /* Variables=['level'L, 'fromlist'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['level'L, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = level; - /* Variables=['level'ML, 'fromlist'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['level'ML, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -8109,19 +6874,13 @@ /* Skip 3 cache entries */ // _MAYBE_EXPAND_METHOD { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -8137,7 +6896,7 @@ } // _MONITOR_CALL { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-1 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ maybe_self = self_or_null; func = callable; int is_meth = !PyStackRef_IsNull(maybe_self[0]); @@ -8164,13 +6923,13 @@ } // _DO_CALL { - /* Variables=[]; base=1; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-oparg; sp=1; logical_sp=-oparg */ + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=1; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -8192,7 +6951,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -8217,7 +6976,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -8267,7 +7026,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ + /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -8275,16 +7034,16 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1 - oparg; sp=-1 - oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1 - oparg; sp=-oparg; logical_sp=-oparg */ + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8294,9 +7053,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } @@ -8324,24 +7086,19 @@ _PyStackRef result; // _MAKE_CALLARGS_A_TUPLE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - kwargs_in = _tos; - callargs = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + kwargs_in = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - func = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ + callargs = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + func = stack_pointer[-4]; + /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs); if (PyTuple_CheckExact(callargs_o)) { tuple = callargs; kwargs_out = kwargs_in; } else { - /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[0] = kwargs_in; - /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'ML]; base=-3; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func'ML, 'unused'M, 'callargs'ML, 'kwargs_in'ML]; base=-3; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8357,20 +7114,20 @@ kwargs_out = kwargs_in; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func'ML, 'unused'M]; base=-3; sp=-1; logical_sp=-1 */ + /* Variables=['func'ML, 'unused'M]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs); stack_pointer = _PyFrame_GetStackPointer(frame); tuple = PyStackRef_FromPyObjectSteal(tuple_o); - stack_pointer += 1; + stack_pointer += 2; } } // _DO_CALL_FUNCTION_EX { - /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-3; sp=0; logical_sp=1 */ + /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ kwargs_st = kwargs_out; callargs_st = tuple; - null = stack_pointer[-2]; + null = stack_pointer[-3]; func_st = func; (void)null; PyObject *func = PyStackRef_AsPyObjectBorrow(func_st); @@ -8384,15 +7141,12 @@ assert(PyTuple_CheckExact(callargs)); PyObject *arg = PyTuple_GET_SIZE(callargs) > 0 ? PyTuple_GET_ITEM(callargs, 0) : &_PyInstrumentation_MISSING; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[-1] = callargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[0] = kwargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=1; logical_sp=1 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + stack_pointer[-2] = callargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + stack_pointer[-1] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-4; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -8437,9 +7191,9 @@ Py_ssize_t nargs = PyTuple_GET_SIZE(callargs); int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func)); - stack_pointer += -1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML]; base=-3; sp=-1; logical_sp=-1 */ + /* Variables=['func_st'ML, 'null'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex( tstate, func_st, locals, @@ -8447,7 +7201,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ + /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -8459,34 +7213,31 @@ assert(PyTuple_CheckExact(callargs)); PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st); assert(kwargs == NULL || PyDict_CheckExact(kwargs)); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[-1] = callargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[0] = kwargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-3; sp=1; logical_sp=1 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + stack_pointer[-2] = callargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ + stack_pointer[-1] = kwargs_st; + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-4; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); result_o = PyObject_Call(func, callargs, kwargs); stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML]; base=-3; sp=0; logical_sp=0 */ + /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML]; base=-4; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(kwargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML]; base=-3; sp=-1; logical_sp=-1 */ + /* Variables=['func_st'ML, 'null'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ + /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(func_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8497,16 +7248,16 @@ } // _CHECK_PERIODIC { - /* Variables=['result'L]; base=-3; sp=-3; logical_sp=-2 */ + /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['result'L]; base=-3; sp=-3; logical_sp=-2 */ + /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer[0] = result; - /* Variables=['result'ML]; base=-3; sp=-3; logical_sp=-2 */ + /* Variables=['result'ML]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['result'ML]; base=-3; sp=-2; logical_sp=-2 */ + /* Variables=['result'ML]; base=-4; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8516,9 +7267,12 @@ stack_pointer += -1; } } - _PyStackRef _tmp; - _tmp = result; - _tos = _tmp; + /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ + stack_pointer[0] = result; + /* Variables=['result'ML]; base=-4; sp=-4; logical_sp=-3 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['result'ML]; base=-4; sp=-3; logical_sp=-3 */ DISPATCH(); } @@ -8545,14 +7299,15 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD_KW { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - kwnames_in = _tos; - args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ - self_or_null = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + kwnames_in = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + args = &stack_pointer[-1 - oparg]; /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ - callable = &stack_pointer[-2 - oparg]; + self_or_null = &stack_pointer[-2 - oparg]; /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ + callable = &stack_pointer[-3 - oparg]; + /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -8561,22 +7316,15 @@ PyObject *method = ((PyMethodObject *)callable_o)->im_func; _PyStackRef temp = callable[0]; callable[0] = PyStackRef_FromPyObjectNew(method); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_in'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = kwnames_in; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_in'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_in'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; } kwnames_out = kwnames_in; } // _MONITOR_CALL_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-2 - oparg; sp=0; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ int is_meth = !PyStackRef_IsNull(self_or_null[0]); PyObject *arg; if (is_meth) { @@ -8589,12 +7337,9 @@ arg = &_PyInstrumentation_MISSING; } PyObject *function = PyStackRef_AsPyObjectBorrow(callable[0]); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer[0] = kwnames_out; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-2 - oparg; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ + stack_pointer[-1] = kwnames_out; + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -8606,7 +7351,7 @@ } // _DO_CALL_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ kwnames = kwnames_out; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); @@ -8631,7 +7376,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8647,9 +7392,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -8665,7 +7410,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -8701,9 +7446,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-2 - oparg; sp=1; logical_sp=1 */ + /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -8719,15 +7464,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ + /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ DISPATCH(); } @@ -8746,26 +7494,21 @@ _PyStackRef exc_st; // _MONITOR_END_ASYNC_FOR { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ assert((next_instr-oparg)->op.code == END_SEND || (next_instr-oparg)->op.code >= MIN_INSTRUMENTED_OPCODE); INSTRUMENTED_JUMP(next_instr-oparg, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT); } // _END_ASYNC_FOR { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - exc_st = _tos; - awaitable_st = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + exc_st = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + awaitable_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ JUMPBY(0); (void)oparg; PyObject *exc = PyStackRef_AsPyObjectBorrow(exc_st); assert(exc && PyExceptionInstance_Check(exc)); - /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = exc_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int matches = PyErr_GivenExceptionMatches(exc, PyExc_StopAsyncIteration); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8773,20 +7516,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = exc_st; exc_st = PyStackRef_NULL; - /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = exc_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = awaitable_st; awaitable_st = PyStackRef_NULL; - /* Variables=['awaitable_st'L, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['awaitable_st'L, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = awaitable_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ } else { Py_INCREF(exc); @@ -8796,13 +7539,6 @@ JUMP_TO_LABEL(exception_unwind); } } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -8818,33 +7554,24 @@ INSTRUCTION_STATS(INSTRUMENTED_END_FOR); _PyStackRef receiver; _PyStackRef value; - value = _tos; - receiver = stack_pointer[-1]; + value = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + receiver = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (PyStackRef_GenCheck(receiver)) { - /* Variables=['receiver'ML, 'value'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['receiver'ML, 'value'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML, 'value'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = monitor_stop_iteration(tstate, frame, this_instr, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - stack_pointer += -1; } + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = receiver; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -8862,38 +7589,29 @@ _PyStackRef receiver; _PyStackRef value; _PyStackRef val; - value = _tos; - receiver = stack_pointer[-1]; + value = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + receiver = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); if (PyGen_Check(receiver_o) || PyCoro_CheckExact(receiver_o)) { - /* Variables=['receiver'ML, 'value'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['receiver'ML, 'value'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML, 'value'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = monitor_stop_iteration(tstate, frame, this_instr, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - stack_pointer += -1; } val = value; - /* Variables=['val'L]; base=-1; sp=0; logical_sp=0 */ - stack_pointer[-1] = val; - /* Variables=['val'ML]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['val'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = val; + /* Variables=['val'ML]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['val'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(receiver); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = val; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -8911,14 +7629,9 @@ _PyStackRef iter; _PyStackRef next; /* Skip 1 cache entry */ - iter = _tos; + iter = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); - /* Variables=['iter'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8941,17 +7654,15 @@ } assert(next_instr[oparg].op.code == END_FOR || next_instr[oparg].op.code == INSTRUMENTED_END_FOR); - JUMPBY(oparg + 1);_PyStackRef _tmp; - _tmp = iter; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; + JUMPBY(oparg + 1); DISPATCH(); } - _PyStackRef _tmp; - _tmp = next; - _tos = _tmp; + /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = next; + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -8967,12 +7678,6 @@ next_instr += 1; INSTRUCTION_STATS(INSTRUMENTED_INSTRUCTION); opcode = INSTRUMENTED_INSTRUCTION; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int next_opcode = _Py_call_instrumentation_instruction( tstate, frame, this_instr); @@ -8985,12 +7690,7 @@ PAUSE_ADAPTIVE_COUNTER(next_instr[1].counter); } assert(next_opcode > 0 && next_opcode < 256); - opcode = next_opcode;_PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; + opcode = next_opcode; DISPATCH_GOTO(); } @@ -9008,33 +7708,23 @@ /* Skip 1 cache entry */ // _CHECK_PERIODIC { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } - stack_pointer += -1; } } // _MONITOR_JUMP_BACKWARD { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ INSTRUMENTED_JUMP(this_instr, next_instr - oparg, PY_MONITORING_EVENT_JUMP); } - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -9050,9 +7740,6 @@ next_instr += 1; INSTRUCTION_STATS(INSTRUMENTED_JUMP_FORWARD); INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_JUMP); - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -9076,12 +7763,6 @@ original_opcode = code->_co_monitoring->lines->data[index*code->_co_monitoring->lines->bytes_per_entry]; next_instr = this_instr; } else { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); original_opcode = _Py_call_instrumentation_line( tstate, frame, this_instr, prev_instr); @@ -9092,24 +7773,14 @@ } next_instr = frame->instr_ptr; if (next_instr != this_instr) { - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } - stack_pointer += -1; } if (_PyOpcode_Caches[original_opcode]) { _PyBinaryOpCache *cache = (_PyBinaryOpCache *)(next_instr+1); PAUSE_ADAPTIVE_COUNTER(cache->counter); } - opcode = original_opcode;_PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; + opcode = original_opcode; DISPATCH_GOTO(); } @@ -9133,23 +7804,18 @@ /* Skip 1 cache entry */ // _LOAD_SUPER_ATTR { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - self_st = _tos; - class_st = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + self_st = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - global_super_st = stack_pointer[-2]; + class_st = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + global_super_st = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); if (opcode == INSTRUMENTED_LOAD_SUPER_ATTR) { PyObject *arg = oparg & 2 ? class : &_PyInstrumentation_MISSING; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -9159,37 +7825,30 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ JUMP_TO_LABEL(error); } - stack_pointer += -1; } PyObject *stack[] = {class, self}; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *super = PyObject_Vectorcall(global_super, stack, oparg & 2, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9218,26 +7877,26 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (super == NULL) { JUMP_TO_LABEL(error); } @@ -9253,25 +7912,18 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'L]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['attr'L]; base=-3; sp=-3; logical_sp=-2 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; - /* Variables=['attr'L, 'null'A]; base=-2; sp=-2; logical_sp=-1 + (oparg & 1) */ + /* Variables=['attr'L, 'null'A]; base=-3; sp=-3; logical_sp=-2 + (oparg & 1) */ stack_pointer[0] = attr; - /* Variables=['attr'ML, 'null'A]; base=-2; sp=-2; logical_sp=-1 + (oparg & 1) */ + /* Variables=['attr'ML, 'null'A]; base=-3; sp=-3; logical_sp=-2 + (oparg & 1) */ stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-2; sp=-1 + (oparg & 1); logical_sp=-1 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2 + (oparg & 1); sp=-1 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 + (oparg & 1); sp=-2 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ - _tos = _tmp; + /* Variables=['attr'ML, 'null'A]; base=-3; sp=-2 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ DISPATCH(); } @@ -9289,9 +7941,6 @@ INSTRUCTION_STATS(INSTRUMENTED_NOT_TAKEN); (void)this_instr; INSTRUMENTED_JUMP(prev_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT); - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -9308,18 +7957,15 @@ next_instr += 1; INSTRUCTION_STATS(INSTRUMENTED_POP_ITER); _PyStackRef iter; - iter = _tos; - INSTRUMENTED_JUMP(prev_instr, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(iter); - stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; + iter = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + INSTRUMENTED_JUMP(prev_instr, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + _PyFrame_SetStackPointer(frame, stack_pointer); + PyStackRef_CLOSE(iter); + stack_pointer = _PyFrame_GetStackPointer(frame); DISPATCH(); } @@ -9336,20 +7982,17 @@ INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_FALSE); _PyStackRef cond; /* Skip 1 cache entry */ - cond = _tos; + cond = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(cond)); int jump = PyStackRef_IsFalse(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -9366,24 +8009,25 @@ INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_NONE); _PyStackRef value; /* Skip 1 cache entry */ - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int jump = PyStackRef_IsNone(value); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } else { + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += 1; } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -9400,24 +8044,22 @@ INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_NOT_NONE); _PyStackRef value; /* Skip 1 cache entry */ - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int jump = !PyStackRef_IsNone(value); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } else { + stack_pointer += -1; } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -9434,20 +8076,17 @@ INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_TRUE); _PyStackRef cond; /* Skip 1 cache entry */ - cond = _tos; + cond = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(cond)); int jump = PyStackRef_IsTrue(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -9464,16 +8103,10 @@ INSTRUCTION_STATS(INSTRUMENTED_RESUME); // _LOAD_BYTECODE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_CODEUNIT *bytecode = _PyEval_GetExecutableCode(tstate, _PyFrame_GetCode(frame)); @@ -9484,77 +8117,48 @@ ptrdiff_t off = this_instr - _PyFrame_GetBytecode(frame); frame->tlbc_index = ((_PyThreadStateImpl *)tstate)->tlbc_index; frame->instr_ptr = bytecode + off; - next_instr = frame->instr_ptr;_PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; + next_instr = frame->instr_ptr; DISPATCH(); } #endif } // _MAYBE_INSTRUMENT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->tracing == 0) { uintptr_t global_version = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & ~_PY_EVAL_EVENTS_MASK; uintptr_t code_version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); if (code_version != global_version) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - next_instr = this_instr;_PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; + next_instr = this_instr; DISPATCH(); } } } // _CHECK_PERIODIC_IF_NOT_YIELD_FROM { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } - stack_pointer += -1; } } } // _MONITOR_RESUME { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation( tstate, oparg > 0, frame, this_instr); @@ -9566,12 +8170,6 @@ next_instr = frame->instr_ptr; } } - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -9591,14 +8189,9 @@ _PyStackRef res; // _RETURN_VALUE_EVENT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - val = _tos; - /* Variables=['val'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = val; - /* Variables=['val'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + val = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_arg( tstate, PY_MONITORING_EVENT_PY_RETURN, @@ -9610,13 +8203,13 @@ } // _RETURN_VALUE { - /* Variables=['val'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['val'ML]; base=-1; sp=0; logical_sp=0 */ retval = val; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(EMPTY()); _Py_LeaveRecursiveCallPy(tstate); @@ -9628,9 +8221,12 @@ res = temp; LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -9650,14 +8246,9 @@ _PyStackRef value; // _YIELD_VALUE_EVENT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - val = _tos; - /* Variables=['val'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = val; - /* Variables=['val'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + val = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_arg( tstate, PY_MONITORING_EVENT_PY_YIELD, @@ -9667,18 +8258,13 @@ JUMP_TO_LABEL(error); } if (frame->instr_ptr != this_instr) { - next_instr = frame->instr_ptr;_PyStackRef _tmp; - _tmp = val; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; + next_instr = frame->instr_ptr; DISPATCH(); } } // _YIELD_VALUE { - /* Variables=['val'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['val'ML]; base=-1; sp=0; logical_sp=0 */ retval = val; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); frame->instr_ptr++; @@ -9689,7 +8275,7 @@ _PyStackRef temp = retval; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); tstate->exc_info = gen->gi_exc_state.previous_item; gen->gi_exc_state.previous_item = NULL; @@ -9711,9 +8297,12 @@ value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; + /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -9726,7 +8315,8 @@ next_instr += 1; INSTRUCTION_STATS(INTERPRETER_EXIT); _PyStackRef retval; - retval = _tos; + retval = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner == FRAME_OWNED_BY_INTERPRETER); assert(_PyFrame_IsIncomplete(frame)); tstate->current_frame = frame->previous; @@ -9734,13 +8324,9 @@ PyObject *result = PyStackRef_AsPyObjectSteal(retval); LLTRACE_RESUME_FRAME(); return result; - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -9756,31 +8342,35 @@ _PyStackRef left; _PyStackRef right; _PyStackRef b; - right = _tos; - left = stack_pointer[-1]; + right = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + left = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ int res = Py_Is(PyStackRef_AsPyObjectBorrow(left), PyStackRef_AsPyObjectBorrow(right)) ^ oparg; _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = right; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ + stack_pointer[-1] = right; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[-1] = left; - /* Variables=['left'ML, 'right'ML]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ + stack_pointer[-2] = left; + /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ b = res ? PyStackRef_True : PyStackRef_False; - _PyStackRef _tmp; - _tmp = b; - _tos = _tmp; + /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer[0] = b; + /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -9799,47 +8389,35 @@ /* Skip 1 cache entry */ // _SPECIALIZE_JUMP_BACKWARD { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ #if ENABLE_SPECIALIZATION if (this_instr->op.code == JUMP_BACKWARD) { this_instr->op.code = tstate->interp->jit ? JUMP_BACKWARD_JIT : JUMP_BACKWARD_NO_JIT; - next_instr = this_instr;_PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; + next_instr = this_instr; DISPATCH_SAME_OPARG(); } #endif } // _CHECK_PERIODIC { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } - stack_pointer += -1; } } // _JUMP_BACKWARD_NO_INTERRUPT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); } - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -9858,34 +8436,27 @@ /* Skip 1 cache entry */ // _CHECK_PERIODIC { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } - stack_pointer += -1; } } // _JUMP_BACKWARD_NO_INTERRUPT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); } // _JIT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ #ifdef _Py_TIER2 _Py_BackoffCounter counter = this_instr[1].counter; if (backoff_counter_triggers(counter) && this_instr->op.code == JUMP_BACKWARD_JIT) { @@ -9895,12 +8466,6 @@ start--; } _PyExecutorObject *executor; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int optimized = _PyOptimizer_Optimize(frame, start, &executor, 0); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9921,16 +8486,9 @@ } else { ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter); - stack_pointer += 1; } #endif } - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -9945,9 +8503,6 @@ INSTRUCTION_STATS(JUMP_BACKWARD_NO_INTERRUPT); assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -9964,34 +8519,24 @@ /* Skip 1 cache entry */ // _CHECK_PERIODIC { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } - stack_pointer += -1; } } // _JUMP_BACKWARD_NO_INTERRUPT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); } - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -10005,9 +8550,6 @@ next_instr += 1; INSTRUCTION_STATS(JUMP_FORWARD); JUMPBY(oparg); - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -10022,21 +8564,18 @@ INSTRUCTION_STATS(LIST_APPEND); _PyStackRef list; _PyStackRef v; - v = _tos; - list = stack_pointer[-1 - (oparg-1)]; - /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ + v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + list = stack_pointer[-2 - (oparg-1)]; + /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list), PyStackRef_AsPyObjectSteal(v)); if (err < 0) { - JUMP_TO_LABEL(error); + JUMP_TO_LABEL(pop_1_error); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['list'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -10051,17 +8590,12 @@ INSTRUCTION_STATS(LIST_EXTEND); _PyStackRef list_st; _PyStackRef iterable_st; - iterable_st = _tos; - list_st = stack_pointer[-1 - (oparg-1)]; - /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ + iterable_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + list_st = stack_pointer[-2 - (oparg-1)]; + /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); PyObject *iterable = PyStackRef_AsPyObjectBorrow(iterable_st); - /* Variables=['list_st'ML, 'unused'MA, 'iterable_st'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ - stack_pointer[0] = iterable_st; - /* Variables=['list_st'ML, 'unused'MA, 'iterable_st'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st'ML, 'unused'MA, 'iterable_st'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10081,7 +8615,7 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st'ML, 'unused'MA]; base=-1 - (oparg-1); sp=0; logical_sp=0 */ + /* Variables=['list_st'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10090,17 +8624,10 @@ assert(Py_IsNone(none_val)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st'ML, 'unused'MA]; base=-1 - (oparg-1); sp=0; logical_sp=0 */ + /* Variables=['list_st'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -10121,29 +8648,18 @@ _PyStackRef *self_or_null; // _SPECIALIZE_LOAD_ATTR { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); next_instr = this_instr; - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_LoadAttr(owner, next_instr, name); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = owner; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(LOAD_ATTR); @@ -10153,18 +8669,12 @@ /* Skip 8 cache entries */ // _LOAD_ATTR { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - self_or_null = &stack_pointer[1]; + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ + self_or_null = &stack_pointer[0]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1); PyObject *attr_o; if (oparg & 1) { attr_o = NULL; - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int is_meth = _PyObject_GetMethod(PyStackRef_AsPyObjectBorrow(owner), name, &attr_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10175,7 +8685,7 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10187,18 +8697,12 @@ } } else { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); attr_o = PyObject_GetAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10209,19 +8713,12 @@ } attr = PyStackRef_FromPyObjectSteal(attr_o); } - _PyStackRef _tmp; - /* Variables=['attr'L, 'self_or_null'A]; base=0; sp=1; logical_sp=1 + (oparg&1) */ + /* Variables=['attr'L, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self_or_null'A]; base=0; sp=1; logical_sp=1 + (oparg&1) */ + /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer += (oparg&1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'A]; base=0; sp=1 + (oparg&1); logical_sp=1 + (oparg&1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=(oparg&1); sp=1 + (oparg&1); logical_sp=(oparg&1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=(oparg&1); sp=(oparg&1); logical_sp=(oparg&1) */ - _tos = _tmp; + /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=(oparg&1); logical_sp=(oparg&1) */ DISPATCH(); } @@ -10243,23 +8740,18 @@ /* Skip 1 cache entry */ // _CHECK_ATTR_CLASS { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10268,44 +8760,31 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_CLASS { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); attr = PyStackRef_FromPyObjectNew(descr); - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; - /* Variables=['owner'L]; base=0; sp=1; logical_sp=1 */ + /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ - _tos = _tmp; + /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } @@ -10327,23 +8806,18 @@ /* Skip 1 cache entry */ // _CHECK_ATTR_CLASS { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10351,14 +8825,11 @@ } // _GUARD_TYPE_VERSION { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint32_t type_version = read_u32(&this_instr[4].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10366,44 +8837,31 @@ } // _LOAD_ATTR_CLASS { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); attr = PyStackRef_FromPyObjectNew(descr); - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; - /* Variables=['owner'L]; base=0; sp=1; logical_sp=1 */ + /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ - _tos = _tmp; + /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } @@ -10421,16 +8879,14 @@ static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size"); _PyStackRef owner; /* Skip 1 cache entry */ - owner = _tos; + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); uint32_t func_version = read_u32(&this_instr[4].cache); PyObject *getattribute = read_obj(&this_instr[6].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert((oparg & 1) == 0); if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10438,9 +8894,6 @@ PyTypeObject *cls = Py_TYPE(owner_o); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(cls->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10449,9 +8902,6 @@ PyFunctionObject *f = (PyFunctionObject *)getattribute; assert(func_version != 0); if (f->func_version != func_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10459,9 +8909,6 @@ PyCodeObject *code = (PyCodeObject *)f->func_code; assert(code->co_argcount == 2); if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10471,6 +8918,9 @@ _PyInterpreterFrame *new_frame = _PyFrame_PushUnchecked( tstate, PyStackRef_FromPyObjectNew(f), 2, frame); new_frame->localsplus[0] = owner; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ new_frame->localsplus[1] = PyStackRef_FromPyObjectNew(name); frame->return_offset = 10 ; DISPATCH_INLINED(new_frame); @@ -10494,15 +8944,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10510,14 +8958,11 @@ } // _CHECK_MANAGED_OBJECT_HAS_VALUES { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10525,15 +8970,12 @@ } // _LOAD_ATTR_INSTANCE_VALUE { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint16_t offset = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset); PyObject *attr_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(*value_ptr); if (attr_o == NULL) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10542,9 +8984,6 @@ int increfed = _Py_TryIncrefCompareStackRef(value_ptr, attr_o, &attr); if (!increfed) { if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10554,12 +8993,9 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10567,22 +9003,15 @@ /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ - _tos = _tmp; + /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } @@ -10604,15 +9033,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10620,14 +9047,11 @@ } // _CHECK_ATTR_METHOD_LAZY_DICT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint16_t dictoffset = read_u16(&this_instr[4].cache); char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); if (dict != NULL) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10636,7 +9060,7 @@ /* Skip 1 cache entry */ // _LOAD_ATTR_METHOD_LAZY_DICT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -10645,15 +9069,15 @@ attr = PyStackRef_FromPyObjectNew(descr); self = owner; } - _PyStackRef _tmp; - _tmp = self; - /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = self; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -10675,15 +9099,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10692,7 +9114,7 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_METHOD_NO_DICT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert(oparg & 1); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); @@ -10702,15 +9124,15 @@ attr = PyStackRef_FromPyObjectNew(descr); self = owner; } - _PyStackRef _tmp; - _tmp = self; - /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = self; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -10732,15 +9154,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10748,14 +9168,11 @@ } // _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10763,15 +9180,12 @@ } // _GUARD_KEYS_VERSION { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint32_t keys_version = read_u32(&this_instr[4].cache); PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10779,7 +9193,7 @@ } // _LOAD_ATTR_METHOD_WITH_VALUES { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -10788,15 +9202,15 @@ attr = PyStackRef_FromPyObjectNew(descr); self = owner; } - _PyStackRef _tmp; - _tmp = self; - /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[-1] = attr; + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = self; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -10818,15 +9232,13 @@ /* Skip 1 cache entry */ // _LOAD_ATTR_MODULE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t dict_version = read_u32(&this_instr[2].cache); uint16_t index = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (Py_TYPE(owner_o)->tp_getattro != PyModule_Type.tp_getattro) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10835,9 +9247,6 @@ assert(dict != NULL); PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != dict_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10847,9 +9256,6 @@ PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(keys) + index; PyObject *attr_o = FT_ATOMIC_LOAD_PTR_RELAXED(ep->me_value); if (attr_o == NULL) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10858,9 +9264,6 @@ int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr); if (!increfed) { if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10870,12 +9273,9 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10883,22 +9283,15 @@ /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ - _tos = _tmp; + /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } @@ -10919,15 +9312,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10936,20 +9327,26 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_NONDESCRIPTOR_NO_DICT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert((oparg & 1) == 0); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); } - _PyStackRef _tmp; - _tmp = attr; - _tos = _tmp; + /* Variables=['attr'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -10970,15 +9367,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -10986,14 +9381,11 @@ } // _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11001,15 +9393,12 @@ } // _GUARD_KEYS_VERSION { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint32_t keys_version = read_u32(&this_instr[4].cache); PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11017,19 +9406,25 @@ } // _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert((oparg & 1) == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); } - _PyStackRef _tmp; - _tmp = attr; - _tos = _tmp; + /* Variables=['attr'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = attr; + /* Variables=['attr'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -11050,11 +9445,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11062,15 +9454,13 @@ } // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11079,40 +9469,28 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_PROPERTY_FRAME { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *fget = read_obj(&this_instr[6].cache); assert((oparg & 1) == 0); assert(Py_IS_TYPE(fget, &PyFunction_Type)); PyFunctionObject *f = (PyFunctionObject *)fget; PyCodeObject *code = (PyCodeObject *)f->func_code; if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } if (code->co_kwonlyargcount) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } if (code->co_argcount != 1) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); } if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11123,7 +9501,7 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -11133,9 +9511,12 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -11145,13 +9526,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -11173,15 +9547,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11189,15 +9561,12 @@ } // _LOAD_ATTR_SLOT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint16_t index = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **addr = (PyObject **)((char *)owner_o + index); PyObject *attr_o = FT_ATOMIC_LOAD_PTR(*addr); if (attr_o == NULL) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11205,9 +9574,6 @@ #ifdef Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(addr, attr_o, &attr); if (!increfed) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11216,40 +9582,27 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; - /* Variables=['owner'L]; base=0; sp=1; logical_sp=1 */ + /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ - _tos = _tmp; + /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } @@ -11271,15 +9624,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11287,15 +9638,12 @@ } // _LOAD_ATTR_WITH_HINT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint16_t hint = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); PyDictObject *dict = _PyObject_GetManagedDict(owner_o); if (dict == NULL) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11304,9 +9652,6 @@ assert(PyDict_CheckExact((PyObject *)dict)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread((PyObject *)dict) && !_PyObject_GC_IS_SHARED(dict)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11315,9 +9660,6 @@ PyObject *attr_o; if (hint >= (size_t)FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_nentries)) { if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11326,9 +9668,6 @@ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); if (dk->dk_kind != DICT_KEYS_UNICODE) { if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11337,9 +9676,6 @@ PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(dk) + hint; if (FT_ATOMIC_LOAD_PTR_RELAXED(ep->me_key) != name) { if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11348,9 +9684,6 @@ attr_o = FT_ATOMIC_LOAD_PTR(ep->me_value); if (attr_o == NULL) { if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11361,9 +9694,6 @@ int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr); if (!increfed) { if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); JUMP_TO_PREDICTED(LOAD_ATTR); @@ -11372,12 +9702,9 @@ #else attr = PyStackRef_FromPyObjectNew(attr_o); #endif - /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = attr; + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11385,22 +9712,15 @@ /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=(oparg & 1); sp=1 + (oparg & 1); logical_sp=(oparg & 1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=(oparg & 1); sp=(oparg & 1); logical_sp=(oparg & 1) */ - _tos = _tmp; + /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } @@ -11415,12 +9735,6 @@ INSTRUCTION_STATS(LOAD_BUILD_CLASS); _PyStackRef bc; PyObject *bc_o; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(BUILTINS(), &_Py_ID(__build_class__), &bc_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11435,9 +9749,12 @@ JUMP_TO_LABEL(error); } bc = PyStackRef_FromPyObjectSteal(bc_o); - _PyStackRef _tmp; - _tmp = bc; - _tos = _tmp; + /* Variables=['bc'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = bc; + /* Variables=['bc'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['bc'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11453,15 +9770,12 @@ _PyStackRef value; assert(oparg < NUM_COMMON_CONSTANTS); value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); - _PyStackRef _tmp; - _tmp = value; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11494,15 +9808,12 @@ } #endif #endif - _PyStackRef _tmp; - _tmp = value; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11520,15 +9831,12 @@ PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); assert(_Py_IsImmortal(obj)); value = PyStackRef_FromPyObjectImmortal(obj); - _PyStackRef _tmp; - _tmp = value; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11545,15 +9853,12 @@ _PyStackRef value; PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); value = PyStackRef_FromPyObjectNewMortal(obj); - _PyStackRef _tmp; - _tmp = value; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11568,30 +9873,27 @@ INSTRUCTION_STATS(LOAD_DEREF); _PyStackRef value; PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); value = _PyCell_GetStackRef(cell); stack_pointer = _PyFrame_GetStackPointer(frame); if (PyStackRef_IsNull(value)) { - /* Variables=['_tos'ML, 'value'L]; base=0; sp=1; logical_sp=2 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['_tos'ML, 'value'ML]; base=0; sp=1; logical_sp=2 */ + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML, 'value'ML]; base=0; sp=2; logical_sp=2 */ + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11607,15 +9909,12 @@ _PyStackRef value; assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - _PyStackRef _tmp; - _tmp = value; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11631,15 +9930,12 @@ _PyStackRef value; value = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_NULL; - _PyStackRef _tmp; - _tmp = value; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11655,15 +9951,12 @@ _PyStackRef value; assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - _PyStackRef _tmp; - _tmp = value; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11682,18 +9975,15 @@ uint32_t oparg2 = oparg & 15; value1 = PyStackRef_Borrow(GETLOCAL(oparg1)); value2 = PyStackRef_Borrow(GETLOCAL(oparg2)); - _PyStackRef _tmp; - _tmp = value2; - /* Variables=['_tos'L, 'value1'L]; base=0; sp=0; logical_sp=2 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML, 'value1'L]; base=0; sp=0; logical_sp=2 */ - /* Variables=['_tos'ML, 'value1'L]; base=0; sp=0; logical_sp=2 */ - stack_pointer[1] = value1; - /* Variables=['_tos'ML, 'value1'ML]; base=0; sp=0; logical_sp=2 */ + /* Variables=['value1'L, 'value2'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[0] = value1; + /* Variables=['value1'ML, 'value2'L]; base=0; sp=0; logical_sp=2 */ + /* Variables=['value1'ML, 'value2'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[1] = value2; + /* Variables=['value1'ML, 'value2'ML]; base=0; sp=0; logical_sp=2 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML, 'value1'ML]; base=0; sp=2; logical_sp=2 */ - _tos = _tmp; + /* Variables=['value1'ML, 'value2'ML]; base=0; sp=2; logical_sp=2 */ DISPATCH(); } @@ -11709,12 +9999,6 @@ _PyStackRef value; _PyStackRef value_s = GETLOCAL(oparg); if (PyStackRef_IsNull(value_s)) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcCheckArg(tstate, PyExc_UnboundLocalError, UNBOUNDLOCAL_ERROR_MSG, @@ -11724,15 +10008,12 @@ JUMP_TO_LABEL(error); } value = PyStackRef_DUP(value_s); - _PyStackRef _tmp; - _tmp = value; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -11751,18 +10032,15 @@ uint32_t oparg2 = oparg & 15; value1 = PyStackRef_DUP(GETLOCAL(oparg1)); value2 = PyStackRef_DUP(GETLOCAL(oparg2)); - _PyStackRef _tmp; - _tmp = value2; - /* Variables=['_tos'L, 'value1'L]; base=0; sp=0; logical_sp=2 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML, 'value1'L]; base=0; sp=0; logical_sp=2 */ - /* Variables=['_tos'ML, 'value1'L]; base=0; sp=0; logical_sp=2 */ - stack_pointer[1] = value1; - /* Variables=['_tos'ML, 'value1'ML]; base=0; sp=0; logical_sp=2 */ + /* Variables=['value1'L, 'value2'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[0] = value1; + /* Variables=['value1'ML, 'value2'L]; base=0; sp=0; logical_sp=2 */ + /* Variables=['value1'ML, 'value2'L]; base=0; sp=0; logical_sp=2 */ + stack_pointer[1] = value2; + /* Variables=['value1'ML, 'value2'ML]; base=0; sp=0; logical_sp=2 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML, 'value1'ML]; base=0; sp=2; logical_sp=2 */ - _tos = _tmp; + /* Variables=['value1'ML, 'value2'ML]; base=0; sp=2; logical_sp=2 */ DISPATCH(); } @@ -11777,19 +10055,14 @@ INSTRUCTION_STATS(LOAD_FROM_DICT_OR_DEREF); _PyStackRef class_dict_st; _PyStackRef value; - class_dict_st = _tos; + class_dict_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o; PyObject *name; PyObject *class_dict = PyStackRef_AsPyObjectBorrow(class_dict_st); assert(class_dict); assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus); name = PyTuple_GET_ITEM(_PyFrame_GetCode(frame)->co_localsplusnames, oparg); - /* Variables=['class_dict_st'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = class_dict_st; - /* Variables=['class_dict_st'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['class_dict_st'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(class_dict, name, &value_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11808,14 +10081,17 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(class_dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectSteal(value_o); - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; + /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -11830,21 +10106,16 @@ INSTRUCTION_STATS(LOAD_FROM_DICT_OR_GLOBALS); _PyStackRef mod_or_class_dict; _PyStackRef v; - mod_or_class_dict = _tos; + mod_or_class_dict = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *v_o; - /* Variables=['mod_or_class_dict'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = mod_or_class_dict; - /* Variables=['mod_or_class_dict'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['mod_or_class_dict'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(PyStackRef_AsPyObjectBorrow(mod_or_class_dict), name, &v_o); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(mod_or_class_dict); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11896,9 +10167,12 @@ } } v = PyStackRef_FromPyObjectSteal(v_o); - _PyStackRef _tmp; - _tmp = v; - _tos = _tmp; + /* Variables=['v'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = v; + /* Variables=['v'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -11918,28 +10192,16 @@ _PyStackRef *null; // _SPECIALIZE_LOAD_GLOBAL { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); next_instr = this_instr; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_LoadGlobal(GLOBALS(), BUILTINS(), next_instr, name); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(LOAD_GLOBAL); @@ -11951,15 +10213,9 @@ /* Skip 1 cache entry */ // _LOAD_GLOBAL { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - res = &stack_pointer[1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + res = &stack_pointer[0]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_LoadGlobalStackRef(GLOBALS(), BUILTINS(), name, res); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11969,22 +10225,15 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['_tos'ML, 'res'A]; base=0; sp=1; logical_sp=2 */ + /* Variables=['res'A]; base=0; sp=0; logical_sp=1 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML, 'res'A, 'null'A]; base=0; sp=2 + (oparg & 1); logical_sp=2 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=1 + (oparg & 1); sp=2 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 + (oparg & 1); sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - _tos = _tmp; + /* Variables=['res'A, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ DISPATCH(); } @@ -12005,22 +10254,16 @@ /* Skip 1 cache entry */ // _GUARD_GLOBALS_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ uint16_t version = read_u16(&this_instr[2].cache); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -12029,23 +10272,17 @@ } // _LOAD_GLOBAL_BUILTINS { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ uint16_t version = read_u16(&this_instr[3].cache); uint16_t index = read_u16(&this_instr[4].cache); PyDictObject *dict = (PyDictObject *)BUILTINS(); if (!PyDict_CheckExact(dict)) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -12054,9 +10291,6 @@ PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); if (res_o == NULL) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -12064,9 +10298,6 @@ #if Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); if (!increfed) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -12078,28 +10309,18 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['_tos'L, 'res'L]; base=0; sp=0; logical_sp=2 */ - null = &stack_pointer[2]; + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ + null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; - /* Variables=['_tos'L, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ - /* Variables=['_tos'ML, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ - stack_pointer[1] = res; - /* Variables=['_tos'ML, 'res'ML, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ - stack_pointer += 2 + (oparg & 1); - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML, 'res'ML, 'null'A]; base=0; sp=2 + (oparg & 1); logical_sp=2 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=1 + (oparg & 1); sp=2 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - stack_pointer += -1; + /* Variables=['res'L, 'null'A]; base=0; sp=0; logical_sp=1 + (oparg & 1) */ + stack_pointer[0] = res; + /* Variables=['res'ML, 'null'A]; base=0; sp=0; logical_sp=1 + (oparg & 1) */ + stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 + (oparg & 1); sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - _tos = _tmp; + /* Variables=['res'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ DISPATCH(); } @@ -12120,27 +10341,21 @@ /* Skip 1 cache entry */ // _NOP { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ } // _LOAD_GLOBAL_MODULE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ uint16_t version = read_u16(&this_instr[2].cache); uint16_t index = read_u16(&this_instr[4].cache); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -12150,9 +10365,6 @@ assert(index < DK_SIZE(keys)); PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); if (res_o == NULL) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -12160,9 +10372,6 @@ #if Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); if (!increfed) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_GLOBAL); assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL)); JUMP_TO_PREDICTED(LOAD_GLOBAL); @@ -12174,28 +10383,18 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['_tos'L, 'res'L]; base=0; sp=0; logical_sp=2 */ - null = &stack_pointer[2]; + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ + null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; - /* Variables=['_tos'L, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ - /* Variables=['_tos'ML, 'res'L, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ - stack_pointer[1] = res; - /* Variables=['_tos'ML, 'res'ML, 'null'A]; base=0; sp=0; logical_sp=2 + (oparg & 1) */ - stack_pointer += 2 + (oparg & 1); - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML, 'res'ML, 'null'A]; base=0; sp=2 + (oparg & 1); logical_sp=2 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=1 + (oparg & 1); sp=2 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - stack_pointer += -1; + /* Variables=['res'L, 'null'A]; base=0; sp=0; logical_sp=1 + (oparg & 1) */ + stack_pointer[0] = res; + /* Variables=['res'ML, 'null'A]; base=0; sp=0; logical_sp=1 + (oparg & 1) */ + stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 + (oparg & 1); sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ - _tos = _tmp; + /* Variables=['res'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ DISPATCH(); } @@ -12211,12 +10410,6 @@ _PyStackRef locals; PyObject *l = LOCALS(); if (l == NULL) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetString(tstate, PyExc_SystemError, "no locals found"); @@ -12224,15 +10417,12 @@ JUMP_TO_LABEL(error); } locals = PyStackRef_FromPyObjectNew(l); - _PyStackRef _tmp; - _tmp = locals; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['locals'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = locals; + /* Variables=['locals'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['locals'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -12247,12 +10437,6 @@ INSTRUCTION_STATS(LOAD_NAME); _PyStackRef v; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *v_o = _PyEval_LoadName(tstate, frame, name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12260,9 +10444,12 @@ JUMP_TO_LABEL(error); } v = PyStackRef_FromPyObjectSteal(v_o); - _PyStackRef _tmp; - _tmp = v; - _tos = _tmp; + /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = v; + /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -12279,15 +10466,12 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); - _PyStackRef _tmp; - _tmp = value; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -12303,11 +10487,15 @@ _PyStackRef owner; _PyStackRef attr; _PyStackRef self_or_null; - owner = _tos; + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg <= SPECIAL_MAX); PyObject *owner_o = PyStackRef_AsPyObjectSteal(owner); PyObject *name = _Py_SpecialMethods[oparg].name; PyObject *self_or_null_o; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PyObject_LookupSpecialMethod(owner_o, name, &self_or_null_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12324,15 +10512,15 @@ attr = PyStackRef_FromPyObjectSteal(attr_o); self_or_null = self_or_null_o == NULL ? PyStackRef_NULL : PyStackRef_FromPyObjectSteal(self_or_null_o); - _PyStackRef _tmp; - _tmp = self_or_null; - /* Variables=['attr'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['attr'L, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; + /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ + /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ + stack_pointer[1] = self_or_null; + /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=-1; logical_sp=1 */ + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -12356,32 +10544,20 @@ _PyStackRef *null; // _SPECIALIZE_LOAD_SUPER_ATTR { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - class_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - global_super_st = stack_pointer[-2]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + class_st = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + global_super_st = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT int load_method = oparg & 1; if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['global_super_st'ML, 'class_st'ML, '_tos'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['global_super_st'ML, 'class_st'ML, '_tos'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML, '_tos'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_LoadSuperAttr(global_super_st, class_st, next_instr, load_method); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(LOAD_SUPER_ATTR); @@ -12390,19 +10566,13 @@ } // _LOAD_SUPER_ATTR { - /* Variables=['global_super_st'ML, 'class_st'ML, '_tos'L]; base=-2; sp=0; logical_sp=1 */ - self_st = _tos; + /* Variables=['global_super_st'ML, 'class_st'ML, 'unused'M]; base=-3; sp=0; logical_sp=0 */ + self_st = stack_pointer[-1]; PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); if (opcode == INSTRUMENTED_LOAD_SUPER_ATTR) { PyObject *arg = oparg & 2 ? class : &_PyInstrumentation_MISSING; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -12412,37 +10582,30 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ JUMP_TO_LABEL(error); } - stack_pointer += -1; } PyObject *stack[] = {class, self}; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *super = PyObject_Vectorcall(global_super, stack, oparg & 2, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12471,26 +10634,26 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (super == NULL) { JUMP_TO_LABEL(error); } @@ -12506,25 +10669,18 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'L]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['attr'L]; base=-3; sp=-3; logical_sp=-2 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - _PyStackRef _tmp; - /* Variables=['attr'L, 'null'A]; base=-2; sp=-2; logical_sp=-1 + (oparg & 1) */ + /* Variables=['attr'L, 'null'A]; base=-3; sp=-3; logical_sp=-2 + (oparg & 1) */ stack_pointer[0] = attr; - /* Variables=['attr'ML, 'null'A]; base=-2; sp=-2; logical_sp=-1 + (oparg & 1) */ + /* Variables=['attr'ML, 'null'A]; base=-3; sp=-3; logical_sp=-2 + (oparg & 1) */ stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-2; sp=-1 + (oparg & 1); logical_sp=-1 + (oparg & 1) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2 + (oparg & 1); sp=-1 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 + (oparg & 1); sp=-2 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ - _tos = _tmp; + /* Variables=['attr'ML, 'null'A]; base=-3; sp=-2 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ DISPATCH(); } @@ -12545,70 +10701,62 @@ _PyStackRef self_st; _PyStackRef attr_st; /* Skip 1 cache entry */ - self_st = _tos; - class_st = stack_pointer[-1]; + self_st = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - global_super_st = stack_pointer[-2]; + class_st = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + global_super_st = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); assert(!(oparg & 1)); if (global_super != (PyObject *)&PySuper_Type) { - _PyStackRef _tmp; - _tmp = self_st; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_SUPER_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR)); JUMP_TO_PREDICTED(LOAD_SUPER_ATTR); } if (!PyType_Check(class)) { - _PyStackRef _tmp; - _tmp = self_st; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_SUPER_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR)); JUMP_TO_PREDICTED(LOAD_SUPER_ATTR); } STAT_INC(LOAD_SUPER_ATTR, hit); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (attr == NULL) { JUMP_TO_LABEL(error); } attr_st = PyStackRef_FromPyObjectSteal(attr); - _PyStackRef _tmp; - _tmp = attr_st; - _tos = _tmp; + /* Variables=['attr_st'L]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer[0] = attr_st; + /* Variables=['attr_st'ML]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attr_st'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } @@ -12630,27 +10778,22 @@ _PyStackRef attr; _PyStackRef self_or_null; /* Skip 1 cache entry */ - self_st = _tos; - class_st = stack_pointer[-1]; + self_st = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - global_super_st = stack_pointer[-2]; + class_st = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + global_super_st = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); assert(oparg & 1); if (global_super != (PyObject *)&PySuper_Type) { - _PyStackRef _tmp; - _tmp = self_st; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_SUPER_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR)); JUMP_TO_PREDICTED(LOAD_SUPER_ATTR); } if (!PyType_Check(class)) { - _PyStackRef _tmp; - _tmp = self_st; - _tos = _tmp; UPDATE_MISS_STATS(LOAD_SUPER_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR)); JUMP_TO_PREDICTED(LOAD_SUPER_ATTR); @@ -12659,12 +10802,6 @@ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); PyTypeObject *cls = (PyTypeObject *)class; int method_found = 0; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PySuper_Lookup(cls, self, name, Py_TYPE(self)->tp_getattro == PyObject_GenericGetAttr ? &method_found : NULL); @@ -12677,7 +10814,7 @@ } else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12686,34 +10823,34 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = global_super_st; global_super_st = self_or_null; - /* Variables=['global_super_st'L, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ + /* Variables=['global_super_st'L, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ stack_pointer[-2] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L]; base=-2; sp=0; logical_sp=0 */ + /* Variables=['global_super_st'ML, 'class_st'L]; base=-3; sp=-1; logical_sp=-1 */ stack_pointer[-1] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-2; sp=0; logical_sp=0 */ + /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ attr = PyStackRef_FromPyObjectSteal(attr_o); - _PyStackRef _tmp; - _tmp = self_or_null; - /* Variables=['attr'L]; base=-2; sp=-2; logical_sp=-1 */ + /* Variables=['attr'L, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=-2; sp=-2; logical_sp=-1 */ - stack_pointer += 1; + /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ + /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ + stack_pointer[1] = self_or_null; + /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-3; logical_sp=-1 */ + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=-2; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -12733,21 +10870,9 @@ } _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_FromPyObjectSteal(cell); - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -12762,21 +10887,16 @@ INSTRUCTION_STATS(MAKE_FUNCTION); _PyStackRef codeobj_st; _PyStackRef func; - codeobj_st = _tos; + codeobj_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *codeobj = PyStackRef_AsPyObjectBorrow(codeobj_st); - /* Variables=['codeobj_st'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = codeobj_st; - /* Variables=['codeobj_st'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['codeobj_st'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyFunctionObject *func_obj = (PyFunctionObject *) PyFunction_New(codeobj, GLOBALS()); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(codeobj_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12786,9 +10906,12 @@ _PyFunction_SetVersion( func_obj, ((PyCodeObject *)codeobj)->co_version); func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj); - _PyStackRef _tmp; - _tmp = func; - _tos = _tmp; + /* Variables=['func'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = func; + /* Variables=['func'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['func'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -12804,19 +10927,14 @@ _PyStackRef dict_st; _PyStackRef key; _PyStackRef value; - value = _tos; - key = stack_pointer[-1]; + value = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - dict_st = stack_pointer[-2 - (oparg - 1)]; - /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ + key = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + dict_st = stack_pointer[-3 - (oparg - 1)]; + /* Variables=[]; base=-3 - (oparg - 1); sp=0; logical_sp=-3 - (oparg - 1) */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); - /* Variables=['dict_st'ML, 'unused'MA, 'key'ML, 'value'L]; base=-2 - (oparg - 1); sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['dict_st'ML, 'unused'MA, 'key'ML, 'value'ML]; base=-2 - (oparg - 1); sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict_st'ML, 'unused'MA, 'key'ML, 'value'ML]; base=-2 - (oparg - 1); sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_SetItem_Take2( (PyDictObject *)dict, @@ -12827,16 +10945,9 @@ if (err != 0) { JUMP_TO_LABEL(pop_2_error); } - _PyStackRef _tmp; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict_st'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; + /* Variables=['dict_st'ML, 'unused'MA]; base=-3 - (oparg - 1); sp=-2; logical_sp=-2 */ DISPATCH(); } @@ -12853,18 +10964,13 @@ _PyStackRef type; _PyStackRef names; _PyStackRef attrs; - names = _tos; - type = stack_pointer[-1]; + names = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - subject = stack_pointer[-2]; + type = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + subject = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ assert(PyTuple_CheckExact(PyStackRef_AsPyObjectBorrow(names))); - /* Variables=['subject'ML, 'type'ML, 'names'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = names; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attrs_o = _PyEval_MatchClass(tstate, PyStackRef_AsPyObjectBorrow(subject), @@ -12872,26 +10978,26 @@ PyStackRef_AsPyObjectBorrow(names)); _PyStackRef tmp = names; names = PyStackRef_NULL; - /* Variables=['subject'ML, 'type'ML, 'names'L]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['subject'ML, 'type'ML, 'names'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = names; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = type; type = PyStackRef_NULL; - /* Variables=['subject'ML, 'type'L, 'names'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['subject'ML, 'type'L, 'names'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = type; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = subject; subject = PyStackRef_NULL; - /* Variables=['subject'L, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['subject'L, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = subject; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (attrs_o) { assert(PyTuple_CheckExact(attrs_o)); attrs = PyStackRef_FromPyObjectSteal(attrs_o); @@ -12902,9 +11008,12 @@ } attrs = PyStackRef_None; } - _PyStackRef _tmp; - _tmp = attrs; - _tos = _tmp; + /* Variables=['attrs'L]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer[0] = attrs; + /* Variables=['attrs'ML]; base=-3; sp=-3; logical_sp=-2 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['attrs'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } @@ -12920,15 +11029,10 @@ _PyStackRef subject; _PyStackRef keys; _PyStackRef values_or_none; - keys = _tos; - subject = stack_pointer[-1]; + keys = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - /* Variables=['subject'ML, 'keys'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = keys; - /* Variables=['subject'ML, 'keys'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML, 'keys'ML]; base=-1; sp=1; logical_sp=1 */ + subject = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *values_or_none_o = _PyEval_MatchKeys(tstate, PyStackRef_AsPyObjectBorrow(subject), PyStackRef_AsPyObjectBorrow(keys)); @@ -12937,9 +11041,12 @@ JUMP_TO_LABEL(error); } values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o); - _PyStackRef _tmp; - _tmp = values_or_none; - _tos = _tmp; + /* Variables=['subject'ML, 'keys'ML, 'values_or_none'L]; base=-2; sp=0; logical_sp=1 */ + stack_pointer[0] = values_or_none; + /* Variables=['subject'ML, 'keys'ML, 'values_or_none'ML]; base=-2; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['subject'ML, 'keys'ML, 'values_or_none'ML]; base=-2; sp=1; logical_sp=1 */ DISPATCH(); } @@ -12954,18 +11061,16 @@ INSTRUCTION_STATS(MATCH_MAPPING); _PyStackRef subject; _PyStackRef res; - subject = _tos; + subject = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? PyStackRef_True : PyStackRef_False; - _PyStackRef _tmp; - _tmp = res; - /* Variables=['subject'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = subject; - /* Variables=['subject'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['subject'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = res; + /* Variables=['subject'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['subject'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -12980,18 +11085,16 @@ INSTRUCTION_STATS(MATCH_SEQUENCE); _PyStackRef subject; _PyStackRef res; - subject = _tos; + subject = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? PyStackRef_True : PyStackRef_False; - _PyStackRef _tmp; - _tmp = res; - /* Variables=['subject'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = subject; - /* Variables=['subject'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['subject'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = res; + /* Variables=['subject'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['subject'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -13004,9 +11107,6 @@ frame->instr_ptr = next_instr; next_instr += 1; INSTRUCTION_STATS(NOP); - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -13019,9 +11119,6 @@ frame->instr_ptr = next_instr; next_instr += 1; INSTRUCTION_STATS(NOT_TAKEN); - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -13035,26 +11132,17 @@ next_instr += 1; INSTRUCTION_STATS(POP_EXCEPT); _PyStackRef exc_value; - exc_value = _tos; + exc_value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyErr_StackItem *exc_info = tstate->exc_info; - /* Variables=['exc_value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = exc_value; - /* Variables=['exc_value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['exc_value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_XSETREF(exc_info->exc_value, PyStackRef_IsNone(exc_value) ? NULL : PyStackRef_AsPyObjectSteal(exc_value)); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-2]; - /* Variables=[]; base=-1; sp=1; logical_sp=-1 */ - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -13068,17 +11156,14 @@ next_instr += 1; INSTRUCTION_STATS(POP_ITER); _PyStackRef value; - value = _tos; - _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(value); - stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; + value = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + _PyFrame_SetStackPointer(frame, stack_pointer); + PyStackRef_CLOSE(value); + stack_pointer = _PyFrame_GetStackPointer(frame); DISPATCH(); } @@ -13095,18 +11180,15 @@ INSTRUCTION_STATS(POP_JUMP_IF_FALSE); _PyStackRef cond; /* Skip 1 cache entry */ - cond = _tos; + cond = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsFalse(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -13127,46 +11209,36 @@ /* Skip 1 cache entry */ // _IS_NONE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (PyStackRef_IsNone(value)) { b = PyStackRef_True; } else { b = PyStackRef_False; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = b; - /* Variables=['value'L]; base=0; sp=1; logical_sp=1 */ + /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; } } // _POP_JUMP_IF_TRUE { - /* Variables=['b'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['b'L]; base=-1; sp=0; logical_sp=0 */ cond = b; assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsTrue(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -13187,46 +11259,36 @@ /* Skip 1 cache entry */ // _IS_NONE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (PyStackRef_IsNone(value)) { b = PyStackRef_True; } else { b = PyStackRef_False; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = b; - /* Variables=['value'L]; base=0; sp=1; logical_sp=1 */ + /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; } } // _POP_JUMP_IF_FALSE { - /* Variables=['b'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['b'L]; base=-1; sp=0; logical_sp=0 */ cond = b; assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsFalse(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -13243,18 +11305,15 @@ INSTRUCTION_STATS(POP_JUMP_IF_TRUE); _PyStackRef cond; /* Skip 1 cache entry */ - cond = _tos; + cond = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsTrue(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -13268,17 +11327,14 @@ next_instr += 1; INSTRUCTION_STATS(POP_TOP); _PyStackRef value; - value = _tos; - _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(value); - stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; + value = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + _PyFrame_SetStackPointer(frame, stack_pointer); + PyStackRef_CLOSE(value); + stack_pointer = _PyFrame_GetStackPointer(frame); DISPATCH(); } @@ -13294,7 +11350,8 @@ _PyStackRef exc; _PyStackRef prev_exc; _PyStackRef new_exc; - exc = _tos; + exc = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyErr_StackItem *exc_info = tstate->exc_info; if (exc_info->exc_value != NULL) { prev_exc = PyStackRef_FromPyObjectSteal(exc_info->exc_value); @@ -13305,15 +11362,15 @@ assert(PyStackRef_ExceptionInstanceCheck(exc)); exc_info->exc_value = PyStackRef_AsPyObjectNew(exc); new_exc = exc; - _PyStackRef _tmp; - _tmp = new_exc; - /* Variables=['prev_exc'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = prev_exc; - /* Variables=['prev_exc'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['prev_exc'L, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[-1] = prev_exc; + /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = new_exc; + /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['prev_exc'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } @@ -13328,15 +11385,12 @@ INSTRUCTION_STATS(PUSH_NULL); _PyStackRef res; res = PyStackRef_NULL; - _PyStackRef _tmp; - _tmp = res; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -13352,20 +11406,14 @@ next_instr += 1; INSTRUCTION_STATS(RAISE_VARARGS); _PyStackRef *args; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=1 - oparg; sp=1; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ assert(oparg < 3); PyObject *cause = oparg == 2 ? PyStackRef_AsPyObjectSteal(args[1]) : NULL; PyObject *exc = oparg > 0 ? PyStackRef_AsPyObjectSteal(args[0]) : NULL; stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=1 - oparg; sp=1 - oparg; logical_sp=1 - oparg */ + /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = do_raise(tstate, exc, cause); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13391,9 +11439,10 @@ INSTRUCTION_STATS(RERAISE); _PyStackRef *values; _PyStackRef exc_st; - exc_st = _tos; - values = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ + exc_st = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + values = &stack_pointer[-1 - oparg]; + /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ PyObject *exc = PyStackRef_AsPyObjectSteal(exc_st); assert(oparg >= 0 && oparg <= 2); if (oparg) { @@ -13403,6 +11452,9 @@ assert(!_PyErr_Occurred(tstate)); } else { + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'MLA]; base=-1 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetString(tstate, PyExc_SystemError, "lasti is not an int"); Py_DECREF(exc); @@ -13411,6 +11463,9 @@ } } assert(exc && PyExceptionInstance_Check(exc)); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['values'MLA]; base=-1 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetRaisedException(tstate, exc); monitor_reraise(tstate, frame, this_instr); @@ -13428,9 +11483,6 @@ INSTRUCTION_STATS(RESERVED); assert(0 && "Executing RESERVED instruction."); Py_FatalError("Executing RESERVED instruction."); - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -13448,16 +11500,10 @@ (void)this_instr; // _LOAD_BYTECODE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_CODEUNIT *bytecode = _PyEval_GetExecutableCode(tstate, _PyFrame_GetCode(frame)); @@ -13468,48 +11514,32 @@ ptrdiff_t off = this_instr - _PyFrame_GetBytecode(frame); frame->tlbc_index = ((_PyThreadStateImpl *)tstate)->tlbc_index; frame->instr_ptr = bytecode + off; - next_instr = frame->instr_ptr;_PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; + next_instr = frame->instr_ptr; DISPATCH(); } #endif } // _MAYBE_INSTRUMENT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->tracing == 0) { uintptr_t global_version = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & ~_PY_EVAL_EVENTS_MASK; uintptr_t code_version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); if (code_version != global_version) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - next_instr = this_instr;_PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; + next_instr = this_instr; DISPATCH(); } } } // _QUICKEN_RESUME { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ #if ENABLE_SPECIALIZATION_FT if (tstate->tracing == 0 && this_instr->op.code == RESUME) { FT_ATOMIC_STORE_UINT8_RELAXED(this_instr->op.code, RESUME_CHECK); @@ -13518,30 +11548,20 @@ } // _CHECK_PERIODIC_IF_NOT_YIELD_FROM { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { JUMP_TO_LABEL(error); } - stack_pointer += -1; } } } - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -13559,9 +11579,6 @@ static_assert(0 == 0, "incorrect cache size"); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(RESUME); assert(_PyOpcode_Deopt[opcode] == (RESUME)); JUMP_TO_PREDICTED(RESUME); @@ -13572,9 +11589,6 @@ uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); assert((version & _PY_EVAL_EVENTS_MASK) == 0); if (eval_breaker != version) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(RESUME); assert(_PyOpcode_Deopt[opcode] == (RESUME)); JUMP_TO_PREDICTED(RESUME); @@ -13582,17 +11596,11 @@ #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(RESUME); assert(_PyOpcode_Deopt[opcode] == (RESUME)); JUMP_TO_PREDICTED(RESUME); } #endif - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; DISPATCH(); } @@ -13608,12 +11616,6 @@ _PyStackRef res; assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13636,9 +11638,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen); LLTRACE_RESUME_FRAME(); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } @@ -13653,9 +11658,13 @@ INSTRUCTION_STATS(RETURN_VALUE); _PyStackRef retval; _PyStackRef res; - retval = _tos; + retval = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(EMPTY()); _Py_LeaveRecursiveCallPy(tstate); @@ -13666,9 +11675,12 @@ LOAD_IP(frame->return_offset); res = temp; LLTRACE_RESUME_FRAME(); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -13689,29 +11701,17 @@ _PyStackRef retval; // _SPECIALIZE_SEND { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - receiver = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + receiver = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['receiver'ML, '_tos'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['receiver'ML, '_tos'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML, '_tos'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_Send(receiver, next_instr); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML]; base=-1; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(SEND); @@ -13720,8 +11720,8 @@ } // _SEND { - /* Variables=['receiver'ML, '_tos'L]; base=-1; sp=0; logical_sp=1 */ - v = _tos; + /* Variables=['receiver'ML, 'unused'M]; base=-2; sp=0; logical_sp=0 */ + v = stack_pointer[-1]; PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); PyObject *retval_o; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); @@ -13732,6 +11732,9 @@ PyGenObject *gen = (PyGenObject *)receiver_o; _PyInterpreterFrame *gen_frame = &gen->gi_iframe; _PyFrame_StackPush(gen_frame, PyStackRef_MakeHeapSafe(v)); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ gen->gi_frame_state = FRAME_EXECUTING; gen->gi_exc_state.previous_item = tstate->exc_info; tstate->exc_info = &gen->gi_exc_state; @@ -13742,23 +11745,11 @@ DISPATCH_INLINED(gen_frame); } if (PyStackRef_IsNone(v) && PyIter_Check(receiver_o)) { - /* Variables=['receiver'ML, 'v'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = v; - /* Variables=['receiver'ML, 'v'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML, 'v'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); retval_o = Py_TYPE(receiver_o)->tp_iternext(receiver_o); stack_pointer = _PyFrame_GetStackPointer(frame); } else { - /* Variables=['receiver'ML, 'v'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = v; - /* Variables=['receiver'ML, 'v'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML, 'v'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); retval_o = PyObject_CallMethodOneArg(receiver_o, &_Py_ID(send), @@ -13784,7 +11775,7 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13793,15 +11784,18 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML]; base=-1; sp=0; logical_sp=0 */ + /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); retval = PyStackRef_FromPyObjectSteal(retval_o); } - _PyStackRef _tmp; - _tmp = retval; - _tos = _tmp; + /* Variables=['receiver'ML, 'retval'L]; base=-2; sp=-1; logical_sp=0 */ + stack_pointer[0] = retval; + /* Variables=['receiver'ML, 'retval'ML]; base=-2; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML, 'retval'ML]; base=-2; sp=0; logical_sp=0 */ DISPATCH(); } @@ -13824,11 +11818,8 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { - _PyStackRef _tmp; - _tmp = _tos; - _tos = _tmp; UPDATE_MISS_STATS(SEND); assert(_PyOpcode_Deopt[opcode] == (SEND)); JUMP_TO_PREDICTED(SEND); @@ -13836,23 +11827,18 @@ } // _SEND_GEN_FRAME { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - v = _tos; - receiver = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + v = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + receiver = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { - _PyStackRef _tmp; - _tmp = v; - _tos = _tmp; UPDATE_MISS_STATS(SEND); assert(_PyOpcode_Deopt[opcode] == (SEND)); JUMP_TO_PREDICTED(SEND); } if (gen->gi_frame_state >= FRAME_EXECUTING) { - _PyStackRef _tmp; - _tmp = v; - _tos = _tmp; UPDATE_MISS_STATS(SEND); assert(_PyOpcode_Deopt[opcode] == (SEND)); JUMP_TO_PREDICTED(SEND); @@ -13869,10 +11855,13 @@ } // _PUSH_FRAME { - /* Variables=['receiver'ML, 'gen_frame'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['receiver'ML, 'gen_frame'L]; base=-2; sp=0; logical_sp=0 */ new_frame = gen_frame; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -13882,13 +11871,6 @@ LOAD_IP(0); LLTRACE_RESUME_FRAME(); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -13903,24 +11885,12 @@ INSTRUCTION_STATS(SETUP_ANNOTATIONS); PyObject *ann_dict; if (LOCALS() == NULL) { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_SystemError, "no locals found when setting up annotations"); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(LOCALS(), &_Py_ID(__annotations__), &ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13948,12 +11918,6 @@ Py_DECREF(ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); } - _PyStackRef _tmp; - _tmp = _tos; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -13968,15 +11932,10 @@ INSTRUCTION_STATS(SET_ADD); _PyStackRef set; _PyStackRef v; - v = _tos; - set = stack_pointer[-1 - (oparg-1)]; - /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ - /* Variables=['set'ML, 'unused'MA, 'v'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ - stack_pointer[0] = v; - /* Variables=['set'ML, 'unused'MA, 'v'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML, 'unused'MA, 'v'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ + v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + set = stack_pointer[-2 - (oparg-1)]; + /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_AddTakeRef((PySetObject *)PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectSteal(v)); @@ -13984,16 +11943,9 @@ if (err) { JUMP_TO_LABEL(pop_1_error); } - _PyStackRef _tmp; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML, 'unused'MA]; base=-1 - (oparg-1); sp=0; logical_sp=0 */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -14009,9 +11961,10 @@ _PyStackRef attr_st; _PyStackRef func_in; _PyStackRef func_out; - func_in = _tos; - attr_st = stack_pointer[-1]; + func_in = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + attr_st = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); func_out = func_in; @@ -14021,12 +11974,12 @@ PyObject **ptr = (PyObject **)(((char *)func) + offset); assert(*ptr == NULL); *ptr = attr; - _PyStackRef _tmp; - _tmp = func_out; + /* Variables=['func_out'L]; base=-2; sp=0; logical_sp=-1 */ + stack_pointer[-2] = func_out; + /* Variables=['func_out'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + /* Variables=['func_out'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } @@ -14041,35 +11994,23 @@ INSTRUCTION_STATS(SET_UPDATE); _PyStackRef set; _PyStackRef iterable; - iterable = _tos; - set = stack_pointer[-1 - (oparg-1)]; - /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ - /* Variables=['set'ML, 'unused'MA, 'iterable'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ - stack_pointer[0] = iterable; - /* Variables=['set'ML, 'unused'MA, 'iterable'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML, 'unused'MA, 'iterable'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ + iterable = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + set = stack_pointer[-2 - (oparg-1)]; + /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_Update(PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML, 'unused'MA]; base=-1 - (oparg-1); sp=0; logical_sp=0 */ + /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -14089,29 +12030,18 @@ _PyStackRef v; // _SPECIALIZE_STORE_ATTR { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); next_instr = this_instr; - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['owner'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['owner'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_StoreAttr(owner, next_instr, name); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = owner; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(STORE_ATTR); @@ -14121,46 +12051,33 @@ /* Skip 3 cache entries */ // _STORE_ATTR { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ + v = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - /* Variables=['v'ML, 'owner'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['v'ML, 'owner'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetAttr(PyStackRef_AsPyObjectBorrow(owner), name, PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = owner; owner = PyStackRef_NULL; - /* Variables=['v'ML, 'owner'L]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['v'ML, 'owner'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['v'ML, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['v'ML, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - /* Variables=['v'L, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['v'L, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = v; - /* Variables=['v'ML, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ + /* Variables=['v'ML, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (err) { JUMP_TO_LABEL(error); } } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -14181,15 +12098,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION_AND_LOCK { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14198,9 +12113,6 @@ if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14209,7 +12121,7 @@ } // _GUARD_DORV_NO_DICT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); @@ -14217,9 +12129,6 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14228,9 +12137,9 @@ } // _STORE_ATTR_INSTANCE_VALUE { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ + value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t offset = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); STAT_INC(STORE_ATTR, hit); @@ -14244,21 +12153,14 @@ _PyDictValues_AddToInsertionOrder(values, index); } UNLOCK_OBJECT(owner_o); - stack_pointer += -1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -14279,15 +12181,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14295,15 +12195,12 @@ } // _STORE_ATTR_SLOT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ + value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t index = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!LOCK_OBJECT(owner_o)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14313,21 +12210,14 @@ PyObject *old_value = *(PyObject **)addr; FT_ATOMIC_STORE_PTR_RELEASE(*(PyObject **)addr, PyStackRef_AsPyObjectSteal(value)); UNLOCK_OBJECT(owner_o); - stack_pointer += -1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -14348,15 +12238,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14364,25 +12252,19 @@ } // _STORE_ATTR_WITH_HINT { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ - value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ + value = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t hint = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); PyDictObject *dict = _PyObject_GetManagedDict(owner_o); if (dict == NULL) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); } if (!LOCK_OBJECT(dict)) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14391,9 +12273,6 @@ if (dict != _PyObject_GetManagedDict(owner_o)) { UNLOCK_OBJECT(dict); if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14406,9 +12285,6 @@ !DK_IS_UNICODE(dict->ma_keys)) { UNLOCK_OBJECT(dict); if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14418,9 +12294,6 @@ if (ep->me_key != name) { UNLOCK_OBJECT(dict); if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); @@ -14430,20 +12303,11 @@ if (old_value == NULL) { UNLOCK_OBJECT(dict); if (true) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(STORE_ATTR); assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR)); JUMP_TO_PREDICTED(STORE_ATTR); } } - /* Variables=['value'ML, 'owner'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = owner; - /* Variables=['value'ML, 'owner'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML, 'owner'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyDict_NotifyEvent(tstate->interp, PyDict_EVENT_MODIFIED, dict, name, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -14452,19 +12316,12 @@ STAT_INC(STORE_ATTR, hit); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -14478,24 +12335,15 @@ next_instr += 1; INSTRUCTION_STATS(STORE_DEREF); _PyStackRef v; - v = _tos; + v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); - /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = v; - /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v)); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-2]; - /* Variables=[]; base=-1; sp=1; logical_sp=-1 */ - stack_pointer += -2; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -14509,23 +12357,20 @@ next_instr += 1; INSTRUCTION_STATS(STORE_FAST); _PyStackRef value; - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) ); _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_XCLOSE(tmp); - stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; + _PyFrame_SetStackPointer(frame, stack_pointer); + PyStackRef_XCLOSE(tmp); + stack_pointer = _PyFrame_GetStackPointer(frame); DISPATCH(); } @@ -14540,7 +12385,8 @@ INSTRUCTION_STATS(STORE_FAST_LOAD_FAST); _PyStackRef value1; _PyStackRef value2; - value1 = _tos; + value1 = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value1) @@ -14550,21 +12396,12 @@ _PyStackRef tmp = GETLOCAL(oparg1); GETLOCAL(oparg1) = value1; value2 = PyStackRef_DUP(GETLOCAL(oparg2)); - /* Variables=['value2'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value2; - /* Variables=['value2'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value2'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['value2'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = value2; + /* Variables=['value2'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = value2; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -14579,9 +12416,10 @@ INSTRUCTION_STATS(STORE_FAST_STORE_FAST); _PyStackRef value2; _PyStackRef value1; - value1 = _tos; - value2 = stack_pointer[-1]; + value1 = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + value2 = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value1) @@ -14594,6 +12432,9 @@ uint32_t oparg2 = oparg & 15; _PyStackRef tmp = GETLOCAL(oparg1); GETLOCAL(oparg1) = value1; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value2'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -14601,17 +12442,10 @@ GETLOCAL(oparg2) = value2; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ + /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-2; sp=-1; logical_sp=-2 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ - _tos = _tmp; DISPATCH(); } @@ -14625,33 +12459,21 @@ next_instr += 1; INSTRUCTION_STATS(STORE_GLOBAL); _PyStackRef v; - v = _tos; + v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = v; - /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_SetItem(GLOBALS(), name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -14665,67 +12487,43 @@ next_instr += 1; INSTRUCTION_STATS(STORE_NAME); _PyStackRef v; - v = _tos; + v = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); int err; if (ns == NULL) { - /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = v; - /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_SystemError, "no locals found when storing %R", name); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } if (PyDict_CheckExact(ns)) { - /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = v; - /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyDict_SetItem(ns, name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); } else { - /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = v; - /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_SetItem(ns, name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -14744,24 +12542,18 @@ _PyStackRef stop; // _SPECIALIZE_STORE_SLICE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=[]; base=0; sp=0; logical_sp=0 */ #if ENABLE_SPECIALIZATION OPCODE_DEFERRED_INC(STORE_SLICE); #endif /* ENABLE_SPECIALIZATION */ } // _STORE_SLICE { - /* Variables=['v'M, 'container'M, 'start'M, '_tos'L]; base=-3; sp=0; logical_sp=1 */ - stop = _tos; - start = stack_pointer[-1]; - container = stack_pointer[-2]; - v = stack_pointer[-3]; - /* Variables=['v'ML, 'container'ML, 'start'ML, 'stop'L]; base=-3; sp=0; logical_sp=1 */ - stack_pointer[0] = stop; - /* Variables=['v'ML, 'container'ML, 'start'ML, 'stop'ML]; base=-3; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML, 'container'ML, 'start'ML, 'stop'ML]; base=-3; sp=1; logical_sp=1 */ + /* Variables=['v'M, 'container'M, 'start'M, 'stop'M]; base=-4; sp=0; logical_sp=0 */ + stop = stack_pointer[-1]; + start = stack_pointer[-2]; + container = stack_pointer[-3]; + v = stack_pointer[-4]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -14773,7 +12565,7 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML, 'container'ML]; base=-3; sp=-1; logical_sp=-1 */ + /* Variables=['v'ML, 'container'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), slice, PyStackRef_AsPyObjectBorrow(v)); Py_DECREF(slice); @@ -14783,31 +12575,24 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = container; container = PyStackRef_NULL; - /* Variables=['v'ML, 'container'L]; base=-3; sp=1; logical_sp=-1 */ + /* Variables=['v'ML, 'container'L]; base=-4; sp=0; logical_sp=-2 */ stack_pointer[-3] = container; - /* Variables=['v'ML, 'container'ML]; base=-3; sp=1; logical_sp=-1 */ + /* Variables=['v'ML, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - /* Variables=['v'L, 'container'ML]; base=-3; sp=1; logical_sp=-1 */ + /* Variables=['v'L, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ stack_pointer[-4] = v; - /* Variables=['v'ML, 'container'ML]; base=-3; sp=1; logical_sp=-1 */ + /* Variables=['v'ML, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -4; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ + /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ if (err) { JUMP_TO_LABEL(error); } } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-4; sp=-3; logical_sp=-4 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ - _tos = _tmp; DISPATCH(); } @@ -14828,30 +12613,19 @@ _PyStackRef v; // _SPECIALIZE_STORE_SUBSCR { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - sub = _tos; - container = stack_pointer[-1]; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + sub = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + container = stack_pointer[-2]; + /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['container'ML, 'sub'L]; base=-1; sp=0; logical_sp=1 */ - stack_pointer[0] = sub; - /* Variables=['container'ML, 'sub'ML]; base=-1; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['container'ML, 'sub'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_StoreSubscr(container, sub, next_instr); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = sub; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['container'ML]; base=-1; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(STORE_SUBSCR); @@ -14860,50 +12634,37 @@ } // _STORE_SUBSCR { - /* Variables=['container'ML, 'sub'L]; base=-1; sp=0; logical_sp=1 */ - v = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ - /* Variables=['v'ML, 'container'ML, 'sub'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = sub; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ + v = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub), PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; - /* Variables=['v'ML, 'container'ML, 'sub'L]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['v'ML, 'container'ML, 'sub'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = sub; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; - /* Variables=['v'ML, 'container'L, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['v'ML, 'container'L, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = container; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - /* Variables=['v'L, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['v'L, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = v; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ + /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (err) { JUMP_TO_LABEL(error); } } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-3; sp=-2; logical_sp=-3 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ - _tos = _tmp; DISPATCH(); } @@ -14923,27 +12684,19 @@ _PyStackRef dict_st; _PyStackRef sub; /* Skip 1 cache entry */ - sub = _tos; - dict_st = stack_pointer[-1]; + sub = stack_pointer[-1]; /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - value = stack_pointer[-2]; + dict_st = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + value = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { - _PyStackRef _tmp; - _tmp = sub; - _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); } STAT_INC(STORE_SUBSCR, hit); - /* Variables=['value'ML, 'dict_st'ML, 'sub'L]; base=-2; sp=0; logical_sp=1 */ - stack_pointer[0] = sub; - /* Variables=['value'ML, 'dict_st'ML, 'sub'ML]; base=-2; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML, 'dict_st'ML, 'sub'ML]; base=-2; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_SetItem_Take2((PyDictObject *)dict, PyStackRef_AsPyObjectSteal(sub), @@ -14951,20 +12704,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { JUMP_TO_LABEL(error); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-3; sp=-2; logical_sp=-3 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ - _tos = _tmp; DISPATCH(); } @@ -14985,13 +12731,11 @@ _PyStackRef sub_st; // _GUARD_TOS_INT { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); @@ -15000,36 +12744,27 @@ /* Skip 1 cache entry */ // _STORE_SUBSCR_LIST_INT { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ sub_st = value; - list_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - value = stack_pointer[-2]; + list_st = stack_pointer[-2]; /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ + value = stack_pointer[-3]; + /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); if (!PyList_CheckExact(list)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); } if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (!LOCK_OBJECT(list)) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); @@ -15037,9 +12772,6 @@ if (index >= PyList_GET_SIZE(list)) { UNLOCK_OBJECT(list); if (true) { - _PyStackRef _tmp; - _tmp = sub_st; - _tos = _tmp; UPDATE_MISS_STATS(STORE_SUBSCR); assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR)); JUMP_TO_PREDICTED(STORE_SUBSCR); @@ -15052,21 +12784,14 @@ assert(old_value != NULL); UNLOCK_OBJECT(list); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); - stack_pointer += -2; + stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ + /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(list_st); Py_DECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); } - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-3; sp=-2; logical_sp=-3 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ - _tos = _tmp; DISPATCH(); } @@ -15081,27 +12806,14 @@ INSTRUCTION_STATS(SWAP); _PyStackRef *bottom; _PyStackRef *top; - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = _tos; - /* Variables=['_tos'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['_tos'ML]; base=0; sp=1; logical_sp=1 */ top = &stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ bottom = &stack_pointer[-2 - (oparg-2)]; - /* Variables=[]; base=-1 - (oparg-2); sp=1; logical_sp=-1 - (oparg-2) */ + /* Variables=[]; base=-2 - (oparg-2); sp=0; logical_sp=-2 - (oparg-2) */ _PyStackRef temp = bottom[0]; bottom[0] = top[0]; top[0] = temp; assert(oparg >= 2); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=0; sp=1; logical_sp=0 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -15121,28 +12833,17 @@ _PyStackRef res; // _SPECIALIZE_TO_BOOL { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_ToBool(value, next_instr); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(TO_BOOL); @@ -15152,19 +12853,13 @@ /* Skip 2 cache entries */ // _TO_BOOL { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_IsTrue(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -15173,9 +12868,12 @@ } res = err ? PyStackRef_True : PyStackRef_False; } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -15197,15 +12895,13 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - owner = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + owner = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - _PyStackRef _tmp; - _tmp = owner; - _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); @@ -15213,16 +12909,22 @@ } // _REPLACE_WITH_TRUE { - /* Variables=['owner'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ value = owner; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -15241,19 +12943,14 @@ _PyStackRef value; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_BoolCheck(value)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); } STAT_INC(TO_BOOL, hit); - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; DISPATCH(); } @@ -15273,12 +12970,10 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); @@ -15289,14 +12984,18 @@ res = PyStackRef_False; } else { + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; + stack_pointer += 1; } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -15316,38 +13015,24 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyList_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); } STAT_INC(TO_BOOL, hit); res = PyList_GET_SIZE(value_o) ? PyStackRef_True : PyStackRef_False; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = res; - /* Variables=['value'L]; base=0; sp=1; logical_sp=1 */ + /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH(); } @@ -15367,20 +13052,18 @@ _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_IsNone(value)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); } STAT_INC(TO_BOOL, hit); res = PyStackRef_False; - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -15400,13 +13083,11 @@ _PyStackRef res; // _GUARD_TOS_UNICODE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - value = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); JUMP_TO_PREDICTED(TO_BOOL); @@ -15416,7 +13097,7 @@ /* Skip 2 cache entries */ // _TO_BOOL_STR { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ STAT_INC(TO_BOOL, hit); PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (value_o == &_Py_STR(empty)) { @@ -15425,15 +13106,19 @@ } else { assert(Py_SIZE(value_o)); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; + stack_pointer += 1; } } - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -15448,19 +13133,14 @@ INSTRUCTION_STATS(UNARY_INVERT); _PyStackRef value; _PyStackRef res; - value = _tos; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Invert(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -15468,9 +13148,12 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -15485,19 +13168,14 @@ INSTRUCTION_STATS(UNARY_NEGATIVE); _PyStackRef value; _PyStackRef res; - value = _tos; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Negative(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -15505,9 +13183,12 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = res; + /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -15522,13 +13203,14 @@ INSTRUCTION_STATS(UNARY_NOT); _PyStackRef value; _PyStackRef res; - value = _tos; + value = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(value)); res = PyStackRef_IsFalse(value) ? PyStackRef_True : PyStackRef_False; - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ + stack_pointer[-1] = res; + /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -15543,9 +13225,13 @@ INSTRUCTION_STATS(UNPACK_EX); _PyStackRef seq; _PyStackRef *top; - seq = _tos; - top = &stack_pointer[1 + (oparg & 0xFF) + (oparg >> 8)]; + seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + top = &stack_pointer[(oparg & 0xFF) + (oparg >> 8)]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg & 0xFF, oparg >> 8, top); Py_DECREF(seq_o); @@ -15553,16 +13239,9 @@ if (res == 0) { JUMP_TO_LABEL(error); } - _PyStackRef _tmp; stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['unused'A, 'unused', 'unused'A, 'top'A]; base=0; sp=1 + (oparg & 0xFF) + (oparg >> 8); logical_sp=1 + (oparg & 0xFF) + (oparg >> 8) */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=(oparg & 0xFF) + (oparg >> 8); sp=1 + (oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=(oparg & 0xFF) + (oparg >> 8); sp=(oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ - _tos = _tmp; + /* Variables=['unused'A, 'unused', 'unused'A, 'top'A]; base=-1; sp=(oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ DISPATCH(); } @@ -15582,28 +13261,17 @@ _PyStackRef *top; // _SPECIALIZE_UNPACK_SEQUENCE { - /* Variables=['_tos'L]; base=0; sp=0; logical_sp=1 */ - seq = _tos; + /* Variables=[]; base=0; sp=0; logical_sp=0 */ + seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT if (ADAPTIVE_COUNTER_TRIGGERS(counter)) { next_instr = this_instr; - /* Variables=['seq'L]; base=0; sp=0; logical_sp=1 */ - stack_pointer[0] = seq; - /* Variables=['seq'ML]; base=0; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['seq'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_Specialize_UnpackSequence(seq, next_instr, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = seq; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=0; sp=0; logical_sp=0 */ - _tos = _tmp; DISPATCH_SAME_OPARG(); } OPCODE_DEFERRED_INC(UNPACK_SEQUENCE); @@ -15614,9 +13282,12 @@ } // _UNPACK_SEQUENCE { - /* Variables=['seq'L]; base=0; sp=0; logical_sp=1 */ - top = &stack_pointer[oparg]; + /* Variables=['seq'ML]; base=-1; sp=0; logical_sp=0 */ + top = &stack_pointer[-1 + oparg]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg, -1, top); Py_DECREF(seq_o); @@ -15625,16 +13296,9 @@ JUMP_TO_LABEL(error); } } - _PyStackRef _tmp; stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['unused'A, 'top'A]; base=0; sp=oparg; logical_sp=oparg */ - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1 + oparg; sp=oparg; logical_sp=-1 + oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 + oparg; sp=-1 + oparg; logical_sp=-1 + oparg */ - _tos = _tmp; + /* Variables=['unused'A, 'top'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ DISPATCH(); } @@ -15653,21 +13317,16 @@ _PyStackRef seq; _PyStackRef *values; /* Skip 1 cache entry */ - seq = _tos; - values = &stack_pointer[0]; + seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyList_CheckExact(seq_o)) { - _PyStackRef _tmp; - _tmp = seq; - _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); } if (!LOCK_OBJECT(seq_o)) { - _PyStackRef _tmp; - _tmp = seq; - _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); @@ -15675,9 +13334,6 @@ if (PyList_GET_SIZE(seq_o) != oparg) { UNLOCK_OBJECT(seq_o); if (true) { - _PyStackRef _tmp; - _tmp = seq; - _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); @@ -15689,19 +13345,12 @@ *values++ = PyStackRef_FromPyObjectNew(items[i]); } UNLOCK_OBJECT(seq_o); - stack_pointer += oparg; + stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'A]; base=0; sp=oparg; logical_sp=oparg */ + /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1 + oparg; sp=oparg; logical_sp=-1 + oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 + oparg; sp=-1 + oparg; logical_sp=-1 + oparg */ - _tos = _tmp; DISPATCH(); } @@ -15720,21 +13369,16 @@ _PyStackRef seq; _PyStackRef *values; /* Skip 1 cache entry */ - seq = _tos; - values = &stack_pointer[0]; + seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { - _PyStackRef _tmp; - _tmp = seq; - _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); } if (PyTuple_GET_SIZE(seq_o) != oparg) { - _PyStackRef _tmp; - _tmp = seq; - _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); @@ -15744,19 +13388,12 @@ for (int i = oparg; --i >= 0; ) { *values++ = PyStackRef_FromPyObjectNew(items[i]); } - stack_pointer += oparg; + stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'A]; base=0; sp=oparg; logical_sp=oparg */ + /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1 + oparg; sp=oparg; logical_sp=-1 + oparg */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1 + oparg; sp=-1 + oparg; logical_sp=-1 + oparg */ - _tos = _tmp; DISPATCH(); } @@ -15776,21 +13413,16 @@ _PyStackRef val1; _PyStackRef val0; /* Skip 1 cache entry */ - seq = _tos; + seq = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg == 2); PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { - _PyStackRef _tmp; - _tmp = seq; - _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); } if (PyTuple_GET_SIZE(seq_o) != 2) { - _PyStackRef _tmp; - _tmp = seq; - _tos = _tmp; UPDATE_MISS_STATS(UNPACK_SEQUENCE); assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE)); JUMP_TO_PREDICTED(UNPACK_SEQUENCE); @@ -15798,24 +13430,18 @@ STAT_INC(UNPACK_SEQUENCE, hit); val0 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 0)); val1 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 1)); - /* Variables=['val1'L, 'val0'L]; base=0; sp=0; logical_sp=2 */ - stack_pointer[0] = val1; - /* Variables=['val1'ML, 'val0'L]; base=0; sp=0; logical_sp=2 */ - /* Variables=['val1'ML, 'val0'L]; base=0; sp=0; logical_sp=2 */ - stack_pointer[1] = val0; - /* Variables=['val1'ML, 'val0'ML]; base=0; sp=0; logical_sp=2 */ - stack_pointer += 2; + /* Variables=['val1'L, 'val0'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[-1] = val1; + /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ + /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ + stack_pointer[0] = val0; + /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=0; logical_sp=1 */ + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val1'ML, 'val0'ML]; base=0; sp=2; logical_sp=2 */ + /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); - _PyStackRef _tmp; - _tmp = val0; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val1'ML]; base=0; sp=1; logical_sp=1 */ - _tos = _tmp; DISPATCH(); } @@ -15833,13 +13459,14 @@ _PyStackRef lasti; _PyStackRef val; _PyStackRef res; - val = _tos; - lasti = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ - exit_self = stack_pointer[-3]; + val = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ + lasti = stack_pointer[-3]; /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ - exit_func = stack_pointer[-4]; + exit_self = stack_pointer[-4]; /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ + exit_func = stack_pointer[-5]; + /* Variables=[]; base=-5; sp=0; logical_sp=-5 */ PyObject *exc, *tb; PyObject *val_o = PyStackRef_AsPyObjectBorrow(val); PyObject *exit_func_o = PyStackRef_AsPyObjectBorrow(exit_func); @@ -15853,12 +13480,6 @@ (void)lasti; PyObject *stack[5] = {NULL, PyStackRef_AsPyObjectBorrow(exit_self), exc, val_o, tb}; int has_self = !PyStackRef_IsNull(exit_self); - /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'L]; base=-4; sp=0; logical_sp=1 */ - stack_pointer[0] = val; - /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML]; base=-4; sp=0; logical_sp=1 */ - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML]; base=-4; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall(exit_func_o, stack + 2 - has_self, (3 + has_self) | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); @@ -15868,9 +13489,12 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - _PyStackRef _tmp; - _tmp = res; - _tos = _tmp; + /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'L]; base=-5; sp=0; logical_sp=1 */ + stack_pointer[0] = res; + /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'ML]; base=-5; sp=0; logical_sp=1 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'ML]; base=-5; sp=1; logical_sp=1 */ DISPATCH(); } @@ -15885,7 +13509,8 @@ INSTRUCTION_STATS(YIELD_VALUE); _PyStackRef retval; _PyStackRef value; - retval = _tos; + retval = stack_pointer[-1]; + /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); frame->instr_ptr++; PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); @@ -15893,6 +13518,9 @@ assert(oparg == 0 || oparg == 1); gen->gi_frame_state = FRAME_SUSPENDED + oparg; _PyStackRef temp = retval; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); tstate->exc_info = gen->gi_exc_state.previous_item; gen->gi_exc_state.previous_item = NULL; @@ -15913,9 +13541,12 @@ LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); - _PyStackRef _tmp; - _tmp = value; - _tos = _tmp; + /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer[0] = value; + /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -16044,13 +13675,6 @@ JUMP_TO_LABEL(error); #if Py_TAIL_CALL_INTERP int opcode; #endif - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } @@ -16091,13 +13715,6 @@ JUMP_TO_LABEL(error); #if Py_TAIL_CALL_INTERP int opcode; #endif - _PyStackRef _tmp; - _tmp = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ - _tos = _tmp; DISPATCH(); } diff --git a/Python/optimizer_analysis.c b/Python/optimizer_analysis.c index 8d6f32be1f7528..ab28fae94a96a9 100644 --- a/Python/optimizer_analysis.c +++ b/Python/optimizer_analysis.c @@ -306,7 +306,7 @@ remove_globals(_PyInterpreterFrame *frame, _PyUOpInstruction *buffer, #define STACK_LEVEL() ((int)(stack_pointer - ctx->frame->stack)) #define STACK_SIZE() ((int)(ctx->frame->stack_len)) -#define WITHIN_STACK_BOUNDS(OFFSET) \ +#define WITHIN_STACK_BOUNDS() \ (STACK_LEVEL() >= 0 && STACK_LEVEL() <= STACK_SIZE()) diff --git a/Tools/cases_generator/generators_common.py b/Tools/cases_generator/generators_common.py index 6d9da67b307ec2..b72bcf4fb9fbff 100644 --- a/Tools/cases_generator/generators_common.py +++ b/Tools/cases_generator/generators_common.py @@ -151,7 +151,22 @@ def deopt_if( storage: Storage, inst: Instruction | None, ) -> bool: - raise NotImplementedError() + self.out.start_line() + self.out.emit("if (") + lparen = next(tkn_iter) + assert lparen.kind == "LPAREN" + first_tkn = tkn_iter.peek() + emit_to(self.out, tkn_iter, "RPAREN") + self.emit(") {\n") + next(tkn_iter) # Semi colon + assert inst is not None + assert inst.family is not None + family_name = inst.family.name + self.emit(f"UPDATE_MISS_STATS({family_name});\n") + self.emit(f"assert(_PyOpcode_Deopt[opcode] == ({family_name}));\n") + self.emit(f"JUMP_TO_PREDICTED({family_name});\n") + self.emit("}\n") + return not always_true(first_tkn) exit_if = deopt_if diff --git a/Tools/cases_generator/tier1_generator.py b/Tools/cases_generator/tier1_generator.py index 6e43a82cf26d9a..1205c3f1404dc0 100644 --- a/Tools/cases_generator/tier1_generator.py +++ b/Tools/cases_generator/tier1_generator.py @@ -68,63 +68,6 @@ def declare_variables(inst: Instruction, out: CWriter) -> None: declare_variable(var, out) -def move_tos_to_cache(stack: Stack, out: CWriter) -> None: - out.emit("_PyStackRef _tmp;\n") - tmp = StackItem("_tmp", None, "", False, True) - tos = stack.pop(tmp, out) - stack.flush(out) - if tos.name != "_tos": - out.emit(f"_tos = {tos.name};\n") - - -class Tier1Emitter(Emitter): - - def __init__(self, out: CWriter, labels: dict[str, Label]): - super().__init__(out, labels) - self._replacers["DISPATCH"] = self.dispatch - self._replacers["DISPATCH_SAME_OPARG"] = self.dispatch - self._replacers["DISPATCH_GOTO"] = self.dispatch - - def dispatch( - self, - tkn: Token, - tkn_iter: TokenIterator, - uop: CodeSection, - storage: Storage, - inst: Instruction | None, - ) -> bool: - move_tos_to_cache(storage.stack, self.out) - self.out.emit(tkn) - return False - - def deopt_if( - self, - tkn: Token, - tkn_iter: TokenIterator, - uop: CodeSection, - storage: Storage, - inst: Instruction | None, - ) -> bool: - self.out.start_line() - self.out.emit("if (") - lparen = next(tkn_iter) - assert lparen.kind == "LPAREN" - first_tkn = tkn_iter.peek() - emit_to(self.out, tkn_iter, "RPAREN") - self.emit(") {\n") - next(tkn_iter) # Semi colon - assert inst is not None - assert inst.family is not None - family_name = inst.family.name - move_tos_to_cache(storage.stack.copy(), self.out) - self.emit(f"UPDATE_MISS_STATS({family_name});\n") - self.emit(f"assert(_PyOpcode_Deopt[opcode] == ({family_name}));\n") - self.emit(f"JUMP_TO_PREDICTED({family_name});\n") - self.emit("}\n") - return not always_true(first_tkn) - - exit_if = deopt_if - def write_uop( uop: Part, emitter: Emitter, @@ -247,7 +190,7 @@ def generate_tier1( {LABEL_START_MARKER} """) out = CWriter(outfile, 2, lines) - emitter = Tier1Emitter(out, analysis.labels) + emitter = Emitter(out, analysis.labels) generate_tier1_labels(analysis, emitter) outfile.write(f"{LABEL_END_MARKER}\n") outfile.write(FOOTER) @@ -275,7 +218,7 @@ def generate_tier1_cases( analysis: Analysis, outfile: TextIO, lines: bool ) -> None: out = CWriter(outfile, 2, lines) - emitter = Tier1Emitter(out, analysis.labels) + emitter = Emitter(out, analysis.labels) out.emit("\n") for name, inst in sorted(analysis.instructions.items()): out.emit("\n") @@ -316,16 +259,14 @@ def generate_tier1_cases( ) declare_variables(inst, out) offset = 1 # The instruction itself - cache = Local.register("_tos") stack = Stack() - stack.push(cache) for part in inst.parts: # Only emit braces if more than one uop insert_braces = len([p for p in inst.parts if isinstance(p, Uop)]) > 1 reachable, offset, stack = write_uop(part, emitter, offset, stack, inst, insert_braces) out.start_line() if reachable: - move_tos_to_cache(stack, out) + stack.flush(out) out.emit("DISPATCH();\n") out.start_line() out.emit("}") From ba530f60139ce6f820c3e7a57796aaf0ddd73485 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 4 Apr 2025 13:55:01 +0100 Subject: [PATCH 05/10] Fixup generated cases test --- Tools/cases_generator/stack.py | 4 ++-- Tools/cases_generator/tier1_generator.py | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Tools/cases_generator/stack.py b/Tools/cases_generator/stack.py index c38f8a5d112783..14d06948ba1602 100644 --- a/Tools/cases_generator/stack.py +++ b/Tools/cases_generator/stack.py @@ -7,7 +7,7 @@ UNUSED = {"unused"} # Set this to true for voluminous output showing state of stack and locals -PRINT_STACKS = 1 # False +PRINT_STACKS = False def maybe_parenthesize(sym: str) -> str: """Add parentheses around a string if it contains an operator @@ -321,7 +321,7 @@ def save_variables(self, out: CWriter) -> None: var.memory_offset = var_offset stack_offset = var_offset - self.physical_sp Stack._do_emit(out, var.item, stack_offset, self.cast_type, self.extract_bits) - out.emit(self.as_comment() + "\n") + self._print(out) var_offset = var_offset.push(var.item) def flush(self, out: CWriter) -> None: diff --git a/Tools/cases_generator/tier1_generator.py b/Tools/cases_generator/tier1_generator.py index 1205c3f1404dc0..6a8b7ded357b12 100644 --- a/Tools/cases_generator/tier1_generator.py +++ b/Tools/cases_generator/tier1_generator.py @@ -224,8 +224,6 @@ def generate_tier1_cases( out.emit("\n") out.emit(f"TARGET({name}) {{\n") popped = get_popped(inst, analysis) - if inst.name != "INTERPRETER_EXIT": - out.emit(f"assert(STACK_LEVEL() - {popped} >= -1);\n") # We need to ifdef it because this breaks platforms # without computed gotos/tail calling. out.emit(f"#if Py_TAIL_CALL_INTERP\n") From 937ea32ab82ef4ac9a32db66563cbf33344d1486 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 4 Apr 2025 14:00:06 +0100 Subject: [PATCH 06/10] Remove stack manipulation macros --- Python/bytecodes.c | 16 +- Python/ceval_macros.h | 40 - Python/executor_cases.c.h | 1064 +----------------------- Python/generated_cases.c.h | 1614 +----------------------------------- Python/optimizer_cases.c.h | 504 ----------- 5 files changed, 23 insertions(+), 3215 deletions(-) diff --git a/Python/bytecodes.c b/Python/bytecodes.c index a14b771cefbcf2..2444e9e44c862f 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1123,7 +1123,7 @@ dummy_func( _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); DEAD(retval); SAVE_STACK(); - assert(EMPTY()); + assert(STACK_LEVEL() == 0); _Py_LeaveRecursiveCallPy(tstate); // GH-99729: We need to unlink the frame *before* clearing it: _PyInterpreterFrame *dying = frame; @@ -4815,7 +4815,7 @@ dummy_func( PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func); ERROR_IF(gen == NULL, error); - assert(EMPTY()); + assert(STACK_LEVEL() == 0); SAVE_STACK(); _PyInterpreterFrame *gen_frame = &gen->gi_iframe; frame->instr_ptr++; @@ -5224,22 +5224,26 @@ dummy_func( } label(pop_4_error) { - STACK_SHRINK(4); + stack_pointer -= 4; + assert(WITHIN_STACK_BOUNDS()); goto error; } label(pop_3_error) { - STACK_SHRINK(3); + stack_pointer -= 3; + assert(WITHIN_STACK_BOUNDS()); goto error; } label(pop_2_error) { - STACK_SHRINK(2); + stack_pointer -= 2; + assert(WITHIN_STACK_BOUNDS()); goto error; } label(pop_1_error) { - STACK_SHRINK(1); + stack_pointer -= 1; + assert(WITHIN_STACK_BOUNDS()); goto error; } diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h index f19ffd23161ace..3dca4e46ee75e4 100644 --- a/Python/ceval_macros.h +++ b/Python/ceval_macros.h @@ -194,48 +194,8 @@ GETITEM(PyObject *v, Py_ssize_t i) { #define JUMPBY(x) (next_instr += (x)) #define SKIP_OVER(x) (next_instr += (x)) - -/* Stack manipulation macros */ - -/* The stack can grow at most MAXINT deep, as co_nlocals and - co_stacksize are ints. */ #define STACK_LEVEL() ((int)(stack_pointer - _PyFrame_Stackbase(frame))) #define STACK_SIZE() (_PyFrame_GetCode(frame)->co_stacksize) -#define EMPTY() (STACK_LEVEL() == 0) -#define TOP() (stack_pointer[-1]) -#define SECOND() (stack_pointer[-2]) -#define THIRD() (stack_pointer[-3]) -#define FOURTH() (stack_pointer[-4]) -#define PEEK(n) (stack_pointer[-(n)]) -#define POKE(n, v) (stack_pointer[-(n)] = (v)) -#define SET_TOP(v) (stack_pointer[-1] = (v)) -#define SET_SECOND(v) (stack_pointer[-2] = (v)) -#define BASIC_STACKADJ(n) (stack_pointer += n) -#define BASIC_PUSH(v) (*stack_pointer++ = (v)) -#define BASIC_POP() (*--stack_pointer) - -#ifdef Py_DEBUG -#define PUSH(v) do { \ - BASIC_PUSH(v); \ - assert(STACK_LEVEL() <= STACK_SIZE()); \ - } while (0) -#define POP() (assert(STACK_LEVEL() > 0), BASIC_POP()) -#define STACK_GROW(n) do { \ - assert(n >= 0); \ - BASIC_STACKADJ(n); \ - assert(STACK_LEVEL() <= STACK_SIZE()); \ - } while (0) -#define STACK_SHRINK(n) do { \ - assert(n >= 0); \ - assert(STACK_LEVEL() >= n); \ - BASIC_STACKADJ(-(n)); \ - } while (0) -#else -#define PUSH(v) BASIC_PUSH(v) -#define POP() BASIC_POP() -#define STACK_GROW(n) BASIC_STACKADJ(n) -#define STACK_SHRINK(n) BASIC_STACKADJ(-(n)) -#endif #define WITHIN_STACK_BOUNDS() \ (frame->owner == FRAME_OWNED_BY_INTERPRETER || (STACK_LEVEL() >= 0 && STACK_LEVEL() <= STACK_SIZE())) diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 20ac704ba94fe7..c0422d87bfd78b 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -88,12 +88,9 @@ JUMP_TO_ERROR(); } value = PyStackRef_DUP(value_s); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -103,12 +100,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -118,12 +112,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -133,12 +124,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -148,12 +136,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -163,12 +148,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -178,12 +160,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -193,12 +172,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -208,12 +184,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -222,12 +195,9 @@ oparg = CURRENT_OPARG(); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -237,12 +207,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -252,12 +219,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -267,12 +231,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -282,12 +243,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -297,12 +255,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -312,12 +267,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -327,12 +279,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -342,12 +291,9 @@ assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -356,12 +302,9 @@ oparg = CURRENT_OPARG(); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -370,12 +313,9 @@ oparg = CURRENT_OPARG(); value = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_NULL; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -386,12 +326,9 @@ oparg = CURRENT_OPARG(); PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); value = PyStackRef_FromPyObjectNewMortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -401,12 +338,9 @@ PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); assert(_Py_IsImmortal(obj)); value = PyStackRef_FromPyObjectImmortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -417,12 +351,9 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -433,12 +364,9 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -449,12 +377,9 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -465,12 +390,9 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -480,12 +402,9 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -494,7 +413,6 @@ oparg = 0; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -503,7 +421,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -515,7 +432,6 @@ oparg = 1; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -524,7 +440,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -536,7 +451,6 @@ oparg = 2; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -545,7 +459,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -557,7 +470,6 @@ oparg = 3; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -566,7 +478,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -578,7 +489,6 @@ oparg = 4; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -587,7 +497,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -599,7 +508,6 @@ oparg = 5; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -608,7 +516,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -620,7 +527,6 @@ oparg = 6; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -629,7 +535,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -641,7 +546,6 @@ oparg = 7; assert(oparg == CURRENT_OPARG()); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -650,7 +554,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -661,7 +564,6 @@ _PyStackRef value; oparg = CURRENT_OPARG(); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -670,7 +572,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -680,10 +581,8 @@ case _POP_TOP: { _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -693,22 +592,17 @@ case _PUSH_NULL: { _PyStackRef res; res = PyStackRef_NULL; - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } case _END_FOR: { _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -720,17 +614,12 @@ _PyStackRef receiver; _PyStackRef val; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ receiver = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)receiver; val = value; - /* Variables=['val'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = val; - /* Variables=['val'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(receiver); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -741,13 +630,11 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Negative(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -755,12 +642,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -768,13 +652,10 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(value)); res = PyStackRef_IsFalse(value) ? PyStackRef_True : PyStackRef_False; - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -782,13 +663,11 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_IsTrue(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -796,19 +675,15 @@ JUMP_TO_ERROR(); } res = err ? PyStackRef_True : PyStackRef_False; - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _TO_BOOL_BOOL: { _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_BoolCheck(value)) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -821,7 +696,6 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -835,16 +709,13 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; stack_pointer += 1; } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -852,7 +723,6 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyList_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -863,9 +733,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = res; - /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; @@ -875,16 +743,13 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_IsNone(value)) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); res = PyStackRef_False; - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -892,9 +757,7 @@ _PyStackRef tos; _PyStackRef nos; tos = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ nos = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { @@ -907,7 +770,6 @@ case _GUARD_TOS_UNICODE: { _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -920,7 +782,6 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ STAT_INC(TO_BOOL, hit); PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (value_o == &_Py_STR(empty)) { @@ -931,16 +792,13 @@ assert(Py_SIZE(value_o)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; stack_pointer += 1; } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -948,20 +806,15 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -969,13 +822,11 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Invert(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -983,12 +834,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -996,9 +844,7 @@ _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { @@ -1011,7 +857,6 @@ case _GUARD_TOS_INT: { _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -1025,9 +870,7 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -1041,16 +884,12 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1059,9 +898,7 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -1075,16 +912,12 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1093,9 +926,7 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -1109,16 +940,12 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1126,9 +953,7 @@ _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { @@ -1141,7 +966,6 @@ case _GUARD_TOS_FLOAT: { _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -1155,9 +979,7 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -1168,20 +990,14 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1190,9 +1006,7 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -1203,20 +1017,14 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1225,9 +1033,7 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -1238,20 +1044,14 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1260,9 +1060,7 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyUnicode_CheckExact(left_o)); @@ -1274,16 +1072,12 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1291,9 +1085,7 @@ _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); assert(PyUnicode_CheckExact(left_o)); assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(right))); @@ -1317,7 +1109,6 @@ PyObject *right_o = PyStackRef_AsPyObjectSteal(right); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyUnicode_Append(&temp, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1340,9 +1131,7 @@ _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); @@ -1364,9 +1153,7 @@ _PyStackRef left; _PyStackRef res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); @@ -1377,27 +1164,19 @@ PyObject *res_o = d->action(left_o, right_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1407,11 +1186,8 @@ _PyStackRef container; _PyStackRef res; stop = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ start = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ container = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -1423,7 +1199,6 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['container'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); res_o = PyObject_GetItem(PyStackRef_AsPyObjectBorrow(container), slice); Py_DECREF(slice); @@ -1432,7 +1207,6 @@ } stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(container); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1440,12 +1214,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -1455,13 +1226,9 @@ _PyStackRef container; _PyStackRef v; stop = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ start = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ container = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ v = stack_pointer[-4]; - /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -1473,7 +1240,6 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML, 'container'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), slice, PyStackRef_AsPyObjectBorrow(v)); Py_DECREF(slice); @@ -1483,20 +1249,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = container; container = PyStackRef_NULL; - /* Variables=['v'ML, 'container'L]; base=-4; sp=0; logical_sp=-2 */ stack_pointer[-3] = container; - /* Variables=['v'ML, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - /* Variables=['v'L, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ stack_pointer[-4] = v; - /* Variables=['v'ML, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -4; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ if (err) { JUMP_TO_ERROR(); } @@ -1508,9 +1269,7 @@ _PyStackRef list_st; _PyStackRef res; sub_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); @@ -1547,20 +1306,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = list_st; list_st = res; - /* Variables=['list_st'L, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = list_st; - /* Variables=['list_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = sub_st; sub_st = PyStackRef_NULL; - /* Variables=['list_st'ML, 'sub_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub_st; - /* Variables=['list_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1569,9 +1323,7 @@ _PyStackRef str_st; _PyStackRef res; sub_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ str_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *str = PyStackRef_AsPyObjectBorrow(str_st); assert(PyLong_CheckExact(sub)); @@ -1595,17 +1347,13 @@ PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(str_st); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectImmortal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1614,9 +1362,7 @@ _PyStackRef tuple_st; _PyStackRef res; sub_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ tuple_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st); assert(PyLong_CheckExact(sub)); @@ -1640,13 +1386,10 @@ res = PyStackRef_FromPyObjectNew(res_o); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['tuple_st'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = tuple_st; tuple_st = res; - /* Variables=['tuple_st'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = tuple_st; - /* Variables=['tuple_st'ML]; base=-2; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; @@ -1657,9 +1400,7 @@ _PyStackRef dict_st; _PyStackRef res; sub_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { @@ -1679,30 +1420,22 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = sub_st; sub_st = PyStackRef_NULL; - /* Variables=['dict_st'ML, 'sub_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub_st; - /* Variables=['dict_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = dict_st; dict_st = PyStackRef_NULL; - /* Variables=['dict_st'L, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = dict_st; - /* Variables=['dict_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (rc <= 0) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1710,7 +1443,6 @@ _PyStackRef container; _PyStackRef getitem; container = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container)); if (!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) { UOP_STAT_INC(uopcode, miss); @@ -1736,12 +1468,9 @@ } getitem = PyStackRef_FromPyObjectNew(getitem_o); STAT_INC(BINARY_OP, hit); - /* Variables=['container'ML, 'unused'M, 'getitem'L]; base=-2; sp=0; logical_sp=1 */ stack_pointer[0] = getitem; - /* Variables=['container'ML, 'unused'M, 'getitem'ML]; base=-2; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['container'ML, 'unused'M, 'getitem'ML]; base=-2; sp=1; logical_sp=1 */ break; } @@ -1751,21 +1480,15 @@ _PyStackRef container; _PyInterpreterFrame *new_frame; getitem = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ sub = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ container = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ new_frame = _PyFrame_PushUnchecked(tstate, getitem, 2, frame); new_frame->localsplus[0] = container; new_frame->localsplus[1] = sub; frame->return_offset = 6 ; - /* Variables=['new_frame'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -1774,20 +1497,16 @@ _PyStackRef list; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list = stack_pointer[-2 - (oparg-1)]; - /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list), PyStackRef_AsPyObjectSteal(v)); if (err < 0) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } @@ -1796,9 +1515,7 @@ _PyStackRef set; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ set = stack_pointer[-2 - (oparg-1)]; - /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_AddTakeRef((PySetObject *)PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectSteal(v)); @@ -1806,12 +1523,10 @@ if (err) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ JUMP_TO_ERROR(); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } @@ -1820,35 +1535,25 @@ _PyStackRef container; _PyStackRef v; sub = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ container = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ v = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub), PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; - /* Variables=['v'ML, 'container'ML, 'sub'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = sub; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; - /* Variables=['v'ML, 'container'L, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = container; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - /* Variables=['v'L, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = v; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (err) { JUMP_TO_ERROR(); } @@ -1860,11 +1565,8 @@ _PyStackRef list_st; _PyStackRef value; sub_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ value = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); @@ -1897,7 +1599,6 @@ PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(list_st); Py_DECREF(old_value); @@ -1910,11 +1611,8 @@ _PyStackRef dict_st; _PyStackRef value; sub = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ value = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { UOP_STAT_INC(uopcode, miss); @@ -1928,7 +1626,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1942,28 +1639,21 @@ _PyStackRef sub; _PyStackRef container; sub = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ container = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; - /* Variables=['container'ML, 'sub'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub; - /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; - /* Variables=['container'L, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = container; - /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (err) { JUMP_TO_ERROR(); } @@ -1975,14 +1665,12 @@ _PyStackRef res; oparg = CURRENT_OPARG(); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg <= MAX_INTRINSIC_1); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_UnaryFunctions[oparg].func(tstate, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1990,12 +1678,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -2005,9 +1690,7 @@ _PyStackRef res; oparg = CURRENT_OPARG(); value1_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value2_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ assert(oparg <= MAX_INTRINSIC_2); PyObject *value1 = PyStackRef_AsPyObjectBorrow(value1_st); PyObject *value2 = PyStackRef_AsPyObjectBorrow(value2_st); @@ -2015,30 +1698,22 @@ PyObject *res_o = _PyIntrinsics_BinaryFunctions[oparg].func(tstate, value2, value1); _PyStackRef tmp = value1_st; value1_st = PyStackRef_NULL; - /* Variables=['value2_st'ML, 'value1_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = value1_st; - /* Variables=['value2_st'ML, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = value2_st; value2_st = PyStackRef_NULL; - /* Variables=['value2_st'L, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = value2_st; - /* Variables=['value2_st'ML, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -2046,14 +1721,12 @@ _PyStackRef retval; _PyStackRef res; retval = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); - assert(EMPTY()); + assert(STACK_LEVEL() == 0); _Py_LeaveRecursiveCallPy(tstate); _PyInterpreterFrame *dying = frame; frame = tstate->current_frame = dying->previous; @@ -2062,12 +1735,9 @@ LOAD_IP(frame->return_offset); res = temp; LLTRACE_RESUME_FRAME(); - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -2075,7 +1745,6 @@ _PyStackRef obj; _PyStackRef iter; obj = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ unaryfunc getter = NULL; PyObject *obj_o = PyStackRef_AsPyObjectBorrow(obj); PyObject *iter_o; @@ -2092,7 +1761,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2103,7 +1771,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2122,12 +1789,9 @@ JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); - /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -2135,7 +1799,6 @@ _PyStackRef aiter; _PyStackRef awaitable; aiter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *awaitable_o = _PyEval_GetANext(PyStackRef_AsPyObjectBorrow(aiter)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2143,12 +1806,9 @@ JUMP_TO_ERROR(); } awaitable = PyStackRef_FromPyObjectSteal(awaitable_o); - /* Variables=['aiter'ML, 'awaitable'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = awaitable; - /* Variables=['aiter'ML, 'awaitable'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['aiter'ML, 'awaitable'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -2157,13 +1817,11 @@ _PyStackRef iter; oparg = CURRENT_OPARG(); iterable = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2171,12 +1829,9 @@ JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); - /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -2188,9 +1843,7 @@ _PyInterpreterFrame *gen_frame; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ receiver = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { UOP_STAT_INC(uopcode, miss); @@ -2209,9 +1862,7 @@ assert( 2 + oparg <= UINT16_MAX); frame->return_offset = (uint16_t)( 2 + oparg); gen_frame->previous = frame; - /* Variables=['receiver'ML, 'gen_frame'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1].bits = (uintptr_t)gen_frame; - /* Variables=['receiver'ML, 'gen_frame'ML]; base=-2; sp=0; logical_sp=0 */ break; } @@ -2220,7 +1871,6 @@ _PyStackRef value; oparg = CURRENT_OPARG(); retval = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); frame->instr_ptr++; PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); @@ -2230,7 +1880,6 @@ _PyStackRef temp = retval; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); tstate->exc_info = gen->gi_exc_state.previous_item; gen->gi_exc_state.previous_item = NULL; @@ -2251,19 +1900,15 @@ LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); - /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _POP_EXCEPT: { _PyStackRef exc_value; exc_value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyErr_StackItem *exc_info = tstate->exc_info; _PyFrame_SetStackPointer(frame, stack_pointer); Py_XSETREF(exc_info->exc_value, @@ -2272,7 +1917,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -2281,12 +1925,9 @@ oparg = CURRENT_OPARG(); assert(oparg < NUM_COMMON_CONSTANTS); value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2307,12 +1948,9 @@ JUMP_TO_ERROR(); } bc = PyStackRef_FromPyObjectSteal(bc_o); - /* Variables=['bc'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = bc; - /* Variables=['bc'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['bc'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2320,7 +1958,6 @@ _PyStackRef v; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); int err; @@ -2331,7 +1968,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2349,7 +1985,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2390,12 +2025,10 @@ _PyStackRef *top; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ top = &stack_pointer[-1 + oparg]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg, -1, top); Py_DECREF(seq_o); @@ -2405,7 +2038,6 @@ } stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['unused'A, 'top'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ break; } @@ -2415,7 +2047,6 @@ _PyStackRef val0; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg == 2); PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { @@ -2429,15 +2060,10 @@ STAT_INC(UNPACK_SEQUENCE, hit); val0 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 0)); val1 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 1)); - /* Variables=['val1'L, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = val1; - /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = val0; - /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2449,7 +2075,6 @@ _PyStackRef *values; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { @@ -2467,7 +2092,6 @@ } stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2479,7 +2103,6 @@ _PyStackRef *values; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyList_CheckExact(seq_o)) { @@ -2505,7 +2128,6 @@ UNLOCK_OBJECT(seq_o); stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2517,12 +2139,10 @@ _PyStackRef *top; oparg = CURRENT_OPARG(); seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ top = &stack_pointer[(oparg & 0xFF) + (oparg >> 8)]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg & 0xFF, oparg >> 8, top); Py_DECREF(seq_o); @@ -2532,7 +2152,6 @@ } stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['unused'A, 'unused', 'unused'A, 'top'A]; base=-1; sp=(oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ break; } @@ -2541,29 +2160,22 @@ _PyStackRef v; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ v = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetAttr(PyStackRef_AsPyObjectBorrow(owner), name, PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = owner; owner = PyStackRef_NULL; - /* Variables=['v'ML, 'owner'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['v'ML, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - /* Variables=['v'L, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = v; - /* Variables=['v'ML, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (err) { JUMP_TO_ERROR(); } @@ -2574,14 +2186,12 @@ _PyStackRef owner; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2595,14 +2205,12 @@ _PyStackRef v; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_SetItem(GLOBALS(), name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2642,12 +2250,9 @@ JUMP_TO_ERROR(); } locals = PyStackRef_FromPyObjectNew(l); - /* Variables=['locals'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = locals; - /* Variables=['locals'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['locals'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2664,12 +2269,9 @@ JUMP_TO_ERROR(); } v = PyStackRef_FromPyObjectSteal(v_o); - /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = v; - /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2686,7 +2288,6 @@ } stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'A]; base=0; sp=1; logical_sp=1 */ break; } @@ -2699,7 +2300,6 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['null'A]; base=0; sp=(oparg & 1); logical_sp=(oparg & 1) */ break; } @@ -2751,12 +2351,9 @@ res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2791,12 +2388,9 @@ res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2856,7 +2450,6 @@ _PyStackRef value; oparg = CURRENT_OPARG(); class_dict_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o; PyObject *name; PyObject *class_dict = PyStackRef_AsPyObjectBorrow(class_dict_st); @@ -2881,17 +2474,13 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(class_dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectSteal(value_o); - /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -2903,23 +2492,17 @@ value = _PyCell_GetStackRef(cell); stack_pointer = _PyFrame_GetStackPointer(frame); if (PyStackRef_IsNull(value)) { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_ERROR(); } - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2927,14 +2510,12 @@ _PyStackRef v; oparg = CURRENT_OPARG(); v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); _PyFrame_SetStackPointer(frame, stack_pointer); PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -2958,7 +2539,6 @@ _PyStackRef str; oparg = CURRENT_OPARG(); pieces = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ STACKREFS_TO_PYOBJECTS(pieces, oparg, pieces_o); if (CONVERSION_FAILED(pieces_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2971,7 +2551,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ JUMP_TO_ERROR(); } PyObject *str_o = _PyUnicode_JoinArray(&_Py_STR(empty), pieces_o, oparg); @@ -2986,17 +2565,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ if (str_o == NULL) { JUMP_TO_ERROR(); } str = PyStackRef_FromPyObjectSteal(str_o); - /* Variables=['str'L]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer[0] = str; - /* Variables=['str'ML]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['str'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -3005,18 +2580,14 @@ _PyStackRef tup; oparg = CURRENT_OPARG(); values = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ PyObject *tup_o = _PyTuple_FromStackRefStealOnSuccess(values, oparg); if (tup_o == NULL) { JUMP_TO_ERROR(); } tup = PyStackRef_FromPyObjectStealMortal(tup_o); - /* Variables=['tup'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = tup; - /* Variables=['tup'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['tup'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -3025,7 +2596,6 @@ _PyStackRef list; oparg = CURRENT_OPARG(); values = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *list_o = _PyList_FromStackRefStealOnSuccess(values, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3033,12 +2603,9 @@ JUMP_TO_ERROR(); } list = PyStackRef_FromPyObjectStealMortal(list_o); - /* Variables=['list'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = list; - /* Variables=['list'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -3047,9 +2614,7 @@ _PyStackRef list_st; oparg = CURRENT_OPARG(); iterable_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list_st = stack_pointer[-2 - (oparg-1)]; - /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); PyObject *iterable = PyStackRef_AsPyObjectBorrow(iterable_st); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3071,7 +2636,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3080,7 +2644,6 @@ assert(Py_IsNone(none_val)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3092,16 +2655,13 @@ _PyStackRef set; oparg = CURRENT_OPARG(); iterable = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ set = stack_pointer[-2 - (oparg-1)]; - /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_Update(PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3116,7 +2676,6 @@ _PyStackRef set; oparg = CURRENT_OPARG(); values = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *set_o = PySet_New(NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3131,7 +2690,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ JUMP_TO_ERROR(); } int err = 0; @@ -3152,19 +2710,15 @@ if (err) { stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(set_o); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_ERROR(); } set = PyStackRef_FromPyObjectStealMortal(set_o); - /* Variables=['set'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = set; - /* Variables=['set'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -3173,7 +2727,6 @@ _PyStackRef map; oparg = CURRENT_OPARG(); values = &stack_pointer[-oparg*2]; - /* Variables=[]; base=-oparg*2; sp=0; logical_sp=-oparg*2 */ STACKREFS_TO_PYOBJECTS(values, oparg*2, values_o); if (CONVERSION_FAILED(values_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3186,7 +2739,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg*2; sp=-oparg*2; logical_sp=-oparg*2 */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3206,17 +2758,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg*2; sp=-oparg*2; logical_sp=-oparg*2 */ if (map_o == NULL) { JUMP_TO_ERROR(); } map = PyStackRef_FromPyObjectStealMortal(map_o); - /* Variables=['map'L]; base=-oparg*2; sp=-oparg*2; logical_sp=1 - oparg*2 */ stack_pointer[0] = map; - /* Variables=['map'ML]; base=-oparg*2; sp=-oparg*2; logical_sp=1 - oparg*2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['map'ML]; base=-oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ break; } @@ -3264,9 +2812,7 @@ _PyStackRef dict; oparg = CURRENT_OPARG(); update = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict = stack_pointer[-2 - (oparg - 1)]; - /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3285,7 +2831,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3293,7 +2838,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3306,11 +2850,8 @@ _PyStackRef callable; oparg = CURRENT_OPARG(); update = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict = stack_pointer[-2 - (oparg - 1)]; - /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ callable = stack_pointer[-5 - (oparg - 1)]; - /* Variables=[]; base=-5 - (oparg - 1); sp=0; logical_sp=-5 - (oparg - 1) */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); @@ -3323,7 +2864,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3331,7 +2871,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3344,11 +2883,8 @@ _PyStackRef dict_st; oparg = CURRENT_OPARG(); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ key = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ dict_st = stack_pointer[-3 - (oparg - 1)]; - /* Variables=[]; base=-3 - (oparg - 1); sp=0; logical_sp=-3 - (oparg - 1) */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3361,12 +2897,10 @@ if (err != 0) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict_st'ML, 'unused'MA]; base=-3 - (oparg - 1); sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict_st'ML, 'unused'MA]; base=-3 - (oparg - 1); sp=-2; logical_sp=-2 */ break; } @@ -3377,11 +2911,8 @@ _PyStackRef attr_st; oparg = CURRENT_OPARG(); self_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ class_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ global_super_st = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); @@ -3400,36 +2931,26 @@ PyObject *attr = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (attr == NULL) { JUMP_TO_ERROR(); } attr_st = PyStackRef_FromPyObjectSteal(attr); - /* Variables=['attr_st'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = attr_st; - /* Variables=['attr_st'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr_st'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -3441,11 +2962,8 @@ _PyStackRef self_or_null; oparg = CURRENT_OPARG(); self_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ class_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ global_super_st = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); @@ -3474,7 +2992,6 @@ } else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3483,34 +3000,23 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = global_super_st; global_super_st = self_or_null; - /* Variables=['global_super_st'L, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ stack_pointer[-2] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L]; base=-3; sp=-1; logical_sp=-1 */ stack_pointer[-1] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ attr = PyStackRef_FromPyObjectSteal(attr_o); - /* Variables=['attr'L, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[0] = attr; - /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ - /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[1] = self_or_null; - /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-1; logical_sp=-1 */ break; } @@ -3520,7 +3026,6 @@ _PyStackRef *self_or_null; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ self_or_null = &stack_pointer[0]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1); PyObject *attr_o; @@ -3536,7 +3041,6 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3553,7 +3057,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3563,19 +3066,15 @@ stack_pointer += 1; } attr = PyStackRef_FromPyObjectSteal(attr_o); - /* Variables=['attr'L, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer += (oparg&1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=(oparg&1); logical_sp=(oparg&1) */ break; } case _GUARD_TYPE_VERSION: { _PyStackRef owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -3589,7 +3088,6 @@ case _GUARD_TYPE_VERSION_AND_LOCK: { _PyStackRef owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); @@ -3611,7 +3109,6 @@ case _CHECK_MANAGED_OBJECT_HAS_VALUES: { _PyStackRef owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); @@ -3626,7 +3123,6 @@ _PyStackRef owner; _PyStackRef attr; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t offset = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset); @@ -3647,9 +3143,7 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3660,7 +3154,6 @@ _PyStackRef owner; _PyStackRef attr; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t dict_version = (uint32_t)CURRENT_OPERAND0(); uint16_t index = (uint16_t)CURRENT_OPERAND1(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -3695,9 +3188,7 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3709,7 +3200,6 @@ _PyStackRef attr; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t hint = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); @@ -3766,9 +3256,7 @@ #else attr = PyStackRef_FromPyObjectNew(attr_o); #endif - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3779,7 +3267,6 @@ _PyStackRef owner; _PyStackRef attr; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t index = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **addr = (PyObject **)((char *)owner_o + index); @@ -3801,9 +3288,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; - /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; @@ -3812,7 +3297,6 @@ case _CHECK_ATTR_CLASS: { _PyStackRef owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { @@ -3831,7 +3315,6 @@ _PyStackRef owner; _PyStackRef attr; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); @@ -3839,9 +3322,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; - /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; @@ -3852,7 +3333,6 @@ _PyInterpreterFrame *new_frame; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *fget = (PyObject *)CURRENT_OPERAND0(); assert((oparg & 1) == 0); assert(Py_IS_TYPE(fget, &PyFunction_Type)); @@ -3877,9 +3357,7 @@ STAT_INC(LOAD_ATTR, hit); new_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(fget), 1, frame); new_frame->localsplus[0] = owner; - /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -3888,7 +3366,6 @@ case _GUARD_DORV_NO_DICT: { _PyStackRef owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); @@ -3907,9 +3384,7 @@ _PyStackRef owner; _PyStackRef value; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t offset = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); STAT_INC(STORE_ATTR, hit); @@ -3925,7 +3400,6 @@ UNLOCK_OBJECT(owner_o); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -3938,9 +3412,7 @@ _PyStackRef value; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t hint = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); @@ -3996,7 +3468,6 @@ STAT_INC(STORE_ATTR, hit); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -4008,9 +3479,7 @@ _PyStackRef owner; _PyStackRef value; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t index = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!LOCK_OBJECT(owner_o)) { @@ -4024,7 +3493,6 @@ UNLOCK_OBJECT(owner_o); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -4038,9 +3506,7 @@ _PyStackRef res; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert((oparg >> 5) <= Py_GE); @@ -4048,20 +3514,15 @@ PyObject *res_o = PyObject_RichCompare(left_o, right_o, oparg >> 5); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_ERROR(); } @@ -4078,12 +3539,9 @@ else { res = PyStackRef_FromPyObjectSteal(res_o); } - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -4093,9 +3551,7 @@ _PyStackRef res; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); STAT_INC(COMPARE_OP, hit); @@ -4105,12 +3561,9 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -4120,9 +3573,7 @@ _PyStackRef res; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { @@ -4142,12 +3593,9 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -4157,9 +3605,7 @@ _PyStackRef res; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); STAT_INC(COMPARE_OP, hit); @@ -4171,12 +3617,9 @@ assert((oparg & 0xf) == COMPARISON_NOT_EQUALS || (oparg & 0xf) == COMPARISON_EQUALS); assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -4186,34 +3629,24 @@ _PyStackRef b; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ int res = Py_Is(PyStackRef_AsPyObjectBorrow(left), PyStackRef_AsPyObjectBorrow(right)) ^ oparg; _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ b = res ? PyStackRef_True : PyStackRef_False; - /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; - /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -4223,39 +3656,29 @@ _PyStackRef b; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); _PyFrame_SetStackPointer(frame, stack_pointer); int res = PySequence_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; - /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -4265,9 +3688,7 @@ _PyStackRef b; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!(PySet_CheckExact(right_o) || PyFrozenSet_CheckExact(right_o))) { @@ -4279,30 +3700,22 @@ int res = _PySet_Contains((PySetObject *)right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; - /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -4312,9 +3725,7 @@ _PyStackRef b; oparg = CURRENT_OPARG(); right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!PyDict_CheckExact(right_o)) { @@ -4326,30 +3737,22 @@ int res = PyDict_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; - /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -4359,9 +3762,7 @@ _PyStackRef rest; _PyStackRef match; match_type_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ exc_value_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); PyObject *match_type = PyStackRef_AsPyObjectBorrow(match_type_st); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4371,20 +3772,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; - /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match_type_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; - /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = exc_value_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_ERROR(); } PyObject *match_o = NULL; @@ -4394,20 +3790,15 @@ &match_o, &rest_o); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; - /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match_type_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; - /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = exc_value_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_ERROR(); } @@ -4422,15 +3813,10 @@ } rest = PyStackRef_FromPyObjectSteal(rest_o); match = PyStackRef_FromPyObjectSteal(match_o); - /* Variables=['rest'L, 'match'L]; base=-2; sp=-2; logical_sp=0 */ stack_pointer[0] = rest; - /* Variables=['rest'ML, 'match'L]; base=-2; sp=-2; logical_sp=0 */ - /* Variables=['rest'ML, 'match'L]; base=-2; sp=-2; logical_sp=0 */ stack_pointer[1] = match; - /* Variables=['rest'ML, 'match'ML]; base=-2; sp=-2; logical_sp=0 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['rest'ML, 'match'ML]; base=-2; sp=0; logical_sp=0 */ break; } @@ -4439,9 +3825,7 @@ _PyStackRef left; _PyStackRef b; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyExceptionInstance_Check(left_o)); @@ -4456,17 +3840,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(right); stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; - /* Variables=['left'ML, 'b'L]; base=-2; sp=-1; logical_sp=0 */ stack_pointer[0] = b; - /* Variables=['left'ML, 'b'ML]; base=-2; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'b'ML]; base=-2; sp=0; logical_sp=0 */ break; } @@ -4476,9 +3856,7 @@ _PyStackRef res; oparg = CURRENT_OPARG(); fromlist = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ level = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportName(tstate, frame, name, @@ -4486,30 +3864,22 @@ PyStackRef_AsPyObjectBorrow(level)); _PyStackRef tmp = fromlist; fromlist = PyStackRef_NULL; - /* Variables=['level'ML, 'fromlist'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = fromlist; - /* Variables=['level'ML, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = level; level = PyStackRef_NULL; - /* Variables=['level'L, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = level; - /* Variables=['level'ML, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -4518,7 +3888,6 @@ _PyStackRef res; oparg = CURRENT_OPARG(); from = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportFrom(tstate, PyStackRef_AsPyObjectBorrow(from), name); @@ -4527,12 +3896,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['from'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['from'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['from'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4544,7 +3910,6 @@ _PyStackRef value; _PyStackRef b; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (PyStackRef_IsNone(value)) { b = PyStackRef_True; } @@ -4553,15 +3918,11 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = b; - /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } - /* Variables=['b'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = b; - /* Variables=['b'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -4569,7 +3930,6 @@ _PyStackRef obj; _PyStackRef len; obj = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_ssize_t len_i = PyObject_Length(PyStackRef_AsPyObjectBorrow(obj)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4581,12 +3941,9 @@ JUMP_TO_ERROR(); } len = PyStackRef_FromPyObjectSteal(len_o); - /* Variables=['obj'ML, 'len'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = len; - /* Variables=['obj'ML, 'len'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['obj'ML, 'len'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4597,11 +3954,8 @@ _PyStackRef attrs; oparg = CURRENT_OPARG(); names = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ type = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ subject = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ assert(PyTuple_CheckExact(PyStackRef_AsPyObjectBorrow(names))); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attrs_o = _PyEval_MatchClass(tstate, @@ -4610,26 +3964,19 @@ PyStackRef_AsPyObjectBorrow(names)); _PyStackRef tmp = names; names = PyStackRef_NULL; - /* Variables=['subject'ML, 'type'ML, 'names'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = names; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = type; type = PyStackRef_NULL; - /* Variables=['subject'ML, 'type'L, 'names'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = type; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = subject; subject = PyStackRef_NULL; - /* Variables=['subject'L, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = subject; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (attrs_o) { assert(PyTuple_CheckExact(attrs_o)); attrs = PyStackRef_FromPyObjectSteal(attrs_o); @@ -4640,12 +3987,9 @@ } attrs = PyStackRef_None; } - /* Variables=['attrs'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = attrs; - /* Variables=['attrs'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attrs'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -4653,15 +3997,11 @@ _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? PyStackRef_True : PyStackRef_False; - /* Variables=['subject'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['subject'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4669,15 +4009,11 @@ _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? PyStackRef_True : PyStackRef_False; - /* Variables=['subject'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['subject'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4686,9 +4022,7 @@ _PyStackRef subject; _PyStackRef values_or_none; keys = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ subject = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *values_or_none_o = _PyEval_MatchKeys(tstate, PyStackRef_AsPyObjectBorrow(subject), PyStackRef_AsPyObjectBorrow(keys)); @@ -4697,12 +4031,9 @@ JUMP_TO_ERROR(); } values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o); - /* Variables=['subject'ML, 'keys'ML, 'values_or_none'L]; base=-2; sp=0; logical_sp=1 */ stack_pointer[0] = values_or_none; - /* Variables=['subject'ML, 'keys'ML, 'values_or_none'ML]; base=-2; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML, 'keys'ML, 'values_or_none'ML]; base=-2; sp=1; logical_sp=1 */ break; } @@ -4710,13 +4041,11 @@ _PyStackRef iterable; _PyStackRef iter; iterable = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4724,12 +4053,9 @@ JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); - /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -4737,7 +4063,6 @@ _PyStackRef iterable; _PyStackRef iter; iterable = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); if (PyCoro_CheckExact(iterable_o)) { if (!(_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE))) { @@ -4764,15 +4089,11 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = iterable; iterable = iter; - /* Variables=['iterable'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iterable; - /* Variables=['iterable'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } - /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -4782,7 +4103,6 @@ _PyStackRef iter; _PyStackRef next; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o); @@ -4806,12 +4126,9 @@ } } next = PyStackRef_FromPyObjectSteal(next_o); - /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -4820,7 +4137,6 @@ case _ITER_CHECK_LIST: { _PyStackRef iter; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyListIter_Type) { UOP_STAT_INC(uopcode, miss); @@ -4846,7 +4162,6 @@ case _GUARD_NOT_EXHAUSTED_LIST: { _PyStackRef iter; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ #ifndef Py_GIL_DISABLED PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyListIterObject *it = (_PyListIterObject *)iter_o; @@ -4873,7 +4188,6 @@ _PyStackRef iter; _PyStackRef next; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyListIterObject *it = (_PyListIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyListIter_Type); @@ -4903,19 +4217,15 @@ assert(it->it_index < PyList_GET_SIZE(seq)); next = PyStackRef_FromPyObjectNew(PyList_GET_ITEM(seq, it->it_index++)); #endif - /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _ITER_CHECK_TUPLE: { _PyStackRef iter; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTupleIter_Type) { UOP_STAT_INC(uopcode, miss); @@ -4935,7 +4245,6 @@ case _GUARD_NOT_EXHAUSTED_TUPLE: { _PyStackRef iter; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyTupleIterObject *it = (_PyTupleIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -4958,7 +4267,6 @@ _PyStackRef iter; _PyStackRef next; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyTupleIterObject *it = (_PyTupleIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -4969,19 +4277,15 @@ assert(seq); assert(it->it_index < PyTuple_GET_SIZE(seq)); next = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq, it->it_index++)); - /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _ITER_CHECK_RANGE: { _PyStackRef iter; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { UOP_STAT_INC(uopcode, miss); @@ -5001,7 +4305,6 @@ case _GUARD_NOT_EXHAUSTED_RANGE: { _PyStackRef iter; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { @@ -5015,7 +4318,6 @@ _PyStackRef iter; _PyStackRef next; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); #ifdef Py_GIL_DISABLED @@ -5030,12 +4332,9 @@ JUMP_TO_ERROR(); } next = PyStackRef_FromPyObjectSteal(res); - /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -5044,7 +4343,6 @@ _PyInterpreterFrame *gen_frame; oparg = CURRENT_OPARG(); iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(gen) != &PyGen_Type) { UOP_STAT_INC(uopcode, miss); @@ -5069,12 +4367,9 @@ tstate->exc_info = &gen->gi_exc_state; gen_frame->previous = frame; frame->return_offset = (uint16_t)( 2 + oparg); - /* Variables=['iter'ML, 'gen_frame'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0].bits = (uintptr_t)gen_frame; - /* Variables=['iter'ML, 'gen_frame'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'gen_frame'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -5084,14 +4379,12 @@ _PyStackRef self_or_null; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg <= SPECIAL_MAX); PyObject *owner_o = PyStackRef_AsPyObjectSteal(owner); PyObject *name = _Py_SpecialMethods[oparg].name; PyObject *self_or_null_o; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PyObject_LookupSpecialMethod(owner_o, name, &self_or_null_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5108,15 +4401,10 @@ attr = PyStackRef_FromPyObjectSteal(attr_o); self_or_null = self_or_null_o == NULL ? PyStackRef_NULL : PyStackRef_FromPyObjectSteal(self_or_null_o); - /* Variables=['attr'L, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ stack_pointer[0] = attr; - /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ - /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ stack_pointer[1] = self_or_null; - /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=-1; logical_sp=1 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -5127,13 +4415,9 @@ _PyStackRef exit_func; _PyStackRef res; val = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ lasti = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ exit_self = stack_pointer[-4]; - /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ exit_func = stack_pointer[-5]; - /* Variables=[]; base=-5; sp=0; logical_sp=-5 */ PyObject *exc, *tb; PyObject *val_o = PyStackRef_AsPyObjectBorrow(val); PyObject *exit_func_o = PyStackRef_AsPyObjectBorrow(exit_func); @@ -5156,12 +4440,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'L]; base=-5; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'ML]; base=-5; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'ML]; base=-5; sp=1; logical_sp=1 */ break; } @@ -5170,7 +4451,6 @@ _PyStackRef prev_exc; _PyStackRef new_exc; exc = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyErr_StackItem *exc_info = tstate->exc_info; if (exc_info->exc_value != NULL) { prev_exc = PyStackRef_FromPyObjectSteal(exc_info->exc_value); @@ -5181,22 +4461,16 @@ assert(PyStackRef_ExceptionInstanceCheck(exc)); exc_info->exc_value = PyStackRef_AsPyObjectNew(exc); new_exc = exc; - /* Variables=['prev_exc'L, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = prev_exc; - /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = new_exc; - /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT: { _PyStackRef owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); @@ -5210,7 +4484,6 @@ case _GUARD_KEYS_VERSION: { _PyStackRef owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t keys_version = (uint32_t)CURRENT_OPERAND0(); PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; @@ -5228,7 +4501,6 @@ _PyStackRef self; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -5236,15 +4508,10 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); attr = PyStackRef_FromPyObjectNew(descr); self = owner; - /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -5254,7 +4521,6 @@ _PyStackRef self; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert(oparg & 1); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); @@ -5263,15 +4529,10 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); attr = PyStackRef_FromPyObjectNew(descr); self = owner; - /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -5280,24 +4541,19 @@ _PyStackRef attr; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert((oparg & 1) == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); - /* Variables=['attr'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -5306,7 +4562,6 @@ _PyStackRef attr; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert((oparg & 1) == 0); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); @@ -5314,24 +4569,19 @@ assert(descr != NULL); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); - /* Variables=['attr'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _CHECK_ATTR_METHOD_LAZY_DICT: { _PyStackRef owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t dictoffset = (uint16_t)CURRENT_OPERAND0(); char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); @@ -5348,7 +4598,6 @@ _PyStackRef self; oparg = CURRENT_OPARG(); owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -5356,15 +4605,10 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); attr = PyStackRef_FromPyObjectNew(descr); self = owner; - /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -5374,11 +4618,8 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -5405,11 +4646,8 @@ _PyInterpreterFrame *new_frame; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -5427,17 +4665,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { JUMP_TO_ERROR(); } new_frame = temp; - /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5445,7 +4679,6 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { @@ -5477,9 +4710,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { @@ -5507,9 +4738,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyStackRef_IsNull(self_or_null[0])); assert(Py_TYPE(callable_o) == &PyMethod_Type); @@ -5527,7 +4756,6 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); @@ -5547,11 +4775,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif @@ -5580,7 +4805,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5607,17 +4831,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5626,9 +4846,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ if (!PyStackRef_IsNull(null[0])) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -5645,9 +4863,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ assert(PyStackRef_IsNull(self_or_null[0])); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); STAT_INC(CALL, hit); @@ -5673,9 +4889,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; @@ -5691,7 +4905,6 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; @@ -5714,11 +4927,8 @@ oparg = 0; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -5727,12 +4937,9 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5744,11 +4951,8 @@ oparg = 1; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -5757,12 +4961,9 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5774,11 +4975,8 @@ oparg = 2; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -5787,12 +4985,9 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5804,11 +4999,8 @@ oparg = 3; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -5817,12 +5009,9 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5834,11 +5023,8 @@ oparg = 4; assert(oparg == CURRENT_OPARG()); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -5847,12 +5033,9 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -5863,11 +5046,8 @@ _PyInterpreterFrame *new_frame; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); @@ -5876,24 +5056,19 @@ for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _PUSH_FRAME: { _PyInterpreterFrame *new_frame; new_frame = (_PyInterpreterFrame *)stack_pointer[-1].bits; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -5912,11 +5087,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); arg = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ null = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); @@ -5930,12 +5102,9 @@ } STAT_INC(CALL, hit); res = PyStackRef_FromPyObjectNew(Py_TYPE(arg_o)); - /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; - /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5949,11 +5118,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); arg = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ null = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); @@ -5971,7 +5137,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5979,12 +5144,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -5995,11 +5157,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); arg = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ null = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); @@ -6017,7 +5176,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6025,12 +5183,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -6040,11 +5195,8 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); (void)args; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -6094,11 +5246,8 @@ _PyInterpreterFrame *init_frame; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ init = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *shim = _PyFrame_PushTrampolineUnchecked( tstate, (PyCodeObject *)&_Py_InitCleanup, 1, frame); @@ -6112,7 +5261,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FrameClearAndPop(tstate, shim); @@ -6122,19 +5270,15 @@ init_frame = temp; frame->return_offset = 1 + INLINE_CACHE_ENTRIES_CALL; tstate->py_recursion_remaining--; - /* Variables=['init_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0].bits = (uintptr_t)init_frame; - /* Variables=['init_frame'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['init_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _EXIT_INIT_CHECK: { _PyStackRef should_be_none; should_be_none = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_IsNone(should_be_none)) { _PyFrame_SetStackPointer(frame, stack_pointer); PyErr_Format(PyExc_TypeError, @@ -6145,7 +5289,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -6156,11 +5299,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyType_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); @@ -6196,7 +5336,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6219,17 +5358,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6240,11 +5375,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -6280,7 +5412,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6288,12 +5419,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6304,11 +5432,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -6344,7 +5469,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6371,17 +5495,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6392,11 +5512,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -6436,7 +5553,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6460,17 +5576,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6481,11 +5593,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -6520,17 +5629,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6541,11 +5646,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; @@ -6576,9 +5678,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = callable; callable = res; - /* Variables=['callable'L, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-2 - oparg] = callable; - /* Variables=['callable'ML, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -6591,7 +5691,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6601,11 +5700,8 @@ _PyStackRef callable; oparg = CURRENT_OPARG(); arg = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ self = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ assert(oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *self_o = PyStackRef_AsPyObjectBorrow(self); @@ -6628,13 +5724,11 @@ UNLOCK_OBJECT(self_o); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6656,11 +5750,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -6718,17 +5809,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6739,11 +5826,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -6787,7 +5871,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6813,17 +5896,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6834,11 +5913,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ assert(oparg == 0 || oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -6882,7 +5958,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6890,12 +5965,9 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -6906,11 +5978,8 @@ _PyStackRef res; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -6953,7 +6022,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6979,17 +6047,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -7003,13 +6067,9 @@ _PyStackRef kwnames_out; oparg = CURRENT_OPARG(); kwnames_in = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ args = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ self_or_null = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -7023,9 +6083,7 @@ stack_pointer = _PyFrame_GetStackPointer(frame); } kwnames_out = kwnames_in; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames_out; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ break; } @@ -7039,13 +6097,9 @@ _PyInterpreterFrame *new_frame; oparg = CURRENT_OPARG(); kwnames = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ args = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ self_or_null = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -7066,23 +6120,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (temp == NULL) { JUMP_TO_ERROR(); } new_frame = temp; - /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer[0].bits = (uintptr_t)new_frame; - /* Variables=['new_frame'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ break; } @@ -7090,7 +6139,6 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { @@ -7110,9 +6158,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); null = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { @@ -7140,9 +6186,7 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); self_or_null = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ assert(PyStackRef_IsNull(self_or_null[0])); _PyStackRef callable_s = callable[0]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable_s); @@ -7160,7 +6204,6 @@ _PyStackRef *callable; oparg = CURRENT_OPARG(); callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); @@ -7181,13 +6224,9 @@ _PyStackRef res; oparg = CURRENT_OPARG(); kwnames = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ args = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ self_or_null = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif @@ -7203,9 +6242,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -7221,7 +6258,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ JUMP_TO_ERROR(); } PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); @@ -7234,7 +6270,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7256,17 +6291,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ break; } @@ -7277,11 +6308,8 @@ _PyStackRef tuple; _PyStackRef kwargs_out; kwargs_in = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ callargs = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ func = stack_pointer[-4]; - /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs); if (PyTuple_CheckExact(callargs_o)) { tuple = callargs; @@ -7303,19 +6331,14 @@ kwargs_out = kwargs_in; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func'ML, 'unused'M]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs); stack_pointer = _PyFrame_GetStackPointer(frame); tuple = PyStackRef_FromPyObjectSteal(tuple_o); stack_pointer += 2; } - /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-2] = tuple; - /* Variables=['func'ML, 'unused'M, 'tuple'ML, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ - /* Variables=['func'ML, 'unused'M, 'tuple'ML, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-1] = kwargs_out; - /* Variables=['func'ML, 'unused'M, 'tuple'ML, 'kwargs_out'ML]; base=-4; sp=0; logical_sp=0 */ break; } @@ -7325,7 +6348,6 @@ _PyStackRef codeobj_st; _PyStackRef func; codeobj_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *codeobj = PyStackRef_AsPyObjectBorrow(codeobj_st); _PyFrame_SetStackPointer(frame, stack_pointer); PyFunctionObject *func_obj = (PyFunctionObject *) @@ -7333,7 +6355,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(codeobj_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7343,12 +6364,9 @@ _PyFunction_SetVersion( func_obj, ((PyCodeObject *)codeobj)->co_version); func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj); - /* Variables=['func'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = func; - /* Variables=['func'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -7358,9 +6376,7 @@ _PyStackRef func_out; oparg = CURRENT_OPARG(); func_in = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ attr_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); func_out = func_in; @@ -7370,12 +6386,9 @@ PyObject **ptr = (PyObject **)(((char *)func) + offset); assert(*ptr == NULL); *ptr = attr; - /* Variables=['func_out'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = func_out; - /* Variables=['func_out'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_out'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -7389,7 +6402,7 @@ if (gen == NULL) { JUMP_TO_ERROR(); } - assert(EMPTY()); + assert(STACK_LEVEL() == 0); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *gen_frame = &gen->gi_iframe; frame->instr_ptr++; @@ -7405,12 +6418,9 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen); LLTRACE_RESUME_FRAME(); - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -7419,7 +6429,6 @@ _PyStackRef slice; oparg = CURRENT_OPARG(); args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ PyObject *start_o = PyStackRef_AsPyObjectBorrow(args[0]); PyObject *stop_o = PyStackRef_AsPyObjectBorrow(args[1]); PyObject *step_o = oparg == 3 ? PyStackRef_AsPyObjectBorrow(args[2]) : NULL; @@ -7434,17 +6443,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ if (slice_o == NULL) { JUMP_TO_ERROR(); } slice = PyStackRef_FromPyObjectStealMortal(slice_o); - /* Variables=['slice'L]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer[0] = slice; - /* Variables=['slice'ML]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['slice'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -7453,7 +6458,6 @@ _PyStackRef result; oparg = CURRENT_OPARG(); value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ conversion_func conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = _PyEval_ConversionFuncs[oparg]; @@ -7462,7 +6466,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7470,12 +6473,9 @@ JUMP_TO_ERROR(); } result = PyStackRef_FromPyObjectSteal(result_o); - /* Variables=['result'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = result; - /* Variables=['result'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['result'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -7483,7 +6483,6 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -7491,7 +6490,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7504,12 +6502,9 @@ res = value; stack_pointer += -1; } - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -7518,37 +6513,27 @@ _PyStackRef value; _PyStackRef res; fmt_spec = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(PyStackRef_AsPyObjectBorrow(value), PyStackRef_AsPyObjectBorrow(fmt_spec)); _PyStackRef tmp = fmt_spec; fmt_spec = PyStackRef_NULL; - /* Variables=['value'ML, 'fmt_spec'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = fmt_spec; - /* Variables=['value'ML, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = value; value = PyStackRef_NULL; - /* Variables=['value'L, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = value; - /* Variables=['value'ML, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -7557,15 +6542,11 @@ _PyStackRef top; oparg = CURRENT_OPARG(); bottom = stack_pointer[-1 - (oparg-1)]; - /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ assert(oparg > 0); top = PyStackRef_DUP(bottom); - /* Variables=['bottom'ML, 'unused'MA, 'top'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer[0] = top; - /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ break; } @@ -7575,9 +6556,7 @@ _PyStackRef res; oparg = CURRENT_OPARG(); rhs = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ lhs = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *lhs_o = PyStackRef_AsPyObjectBorrow(lhs); PyObject *rhs_o = PyStackRef_AsPyObjectBorrow(rhs); assert(_PyEval_BinaryOps[oparg]); @@ -7591,20 +6570,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = lhs; lhs = res; - /* Variables=['lhs'L, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = lhs; - /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = rhs; rhs = PyStackRef_NULL; - /* Variables=['lhs'ML, 'rhs'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = rhs; - /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -7613,9 +6587,7 @@ _PyStackRef *bottom; oparg = CURRENT_OPARG(); top = &stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ bottom = &stack_pointer[-2 - (oparg-2)]; - /* Variables=[]; base=-2 - (oparg-2); sp=0; logical_sp=-2 - (oparg-2) */ _PyStackRef temp = bottom[0]; bottom[0] = top[0]; top[0] = temp; @@ -7644,11 +6616,9 @@ case _GUARD_IS_TRUE_POP: { _PyStackRef flag; flag = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int is_true = PyStackRef_IsTrue(flag); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (!is_true) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -7659,11 +6629,9 @@ case _GUARD_IS_FALSE_POP: { _PyStackRef flag; flag = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int is_false = PyStackRef_IsFalse(flag); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ if (!is_false) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -7674,12 +6642,10 @@ case _GUARD_IS_NONE_POP: { _PyStackRef val; val = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int is_none = PyStackRef_IsNone(val); if (!is_none) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7690,18 +6656,15 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _GUARD_IS_NOT_NONE_POP: { _PyStackRef val; val = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int is_none = PyStackRef_IsNone(val); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7814,12 +6777,9 @@ _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectNew(ptr); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -7827,21 +6787,16 @@ _PyStackRef pop; _PyStackRef value; pop = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectNew(ptr); - /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -7849,12 +6804,9 @@ _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectImmortal(ptr); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -7862,21 +6814,16 @@ _PyStackRef pop; _PyStackRef value; pop = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectImmortal(ptr); - /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -7885,29 +6832,22 @@ _PyStackRef pop1; _PyStackRef value; pop2 = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ pop1 = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['pop1'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop2); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop1); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectImmortal(ptr); - /* Variables=['value'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index e166c6379c1f38..4a3884b9568b98 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -19,7 +19,6 @@ TARGET(BINARY_OP) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP; (void)(opcode); @@ -35,11 +34,8 @@ _PyStackRef res; // _SPECIALIZE_BINARY_OP { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ rhs = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ lhs = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -59,7 +55,6 @@ /* Skip 4 cache entries */ // _BINARY_OP { - /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *lhs_o = PyStackRef_AsPyObjectBorrow(lhs); PyObject *rhs_o = PyStackRef_AsPyObjectBorrow(rhs); assert(_PyEval_BinaryOps[oparg]); @@ -73,26 +68,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = lhs; lhs = res; - /* Variables=['lhs'L, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = lhs; - /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = rhs; rhs = PyStackRef_NULL; - /* Variables=['lhs'ML, 'rhs'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = rhs; - /* Variables=['lhs'ML, 'rhs'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ } DISPATCH(); } TARGET(BINARY_OP_ADD_FLOAT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_ADD_FLOAT; (void)(opcode); @@ -109,9 +98,7 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -121,10 +108,8 @@ } // _GUARD_NOS_FLOAT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { @@ -136,7 +121,6 @@ /* Skip 5 cache entries */ // _BINARY_OP_ADD_FLOAT { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -150,17 +134,13 @@ JUMP_TO_LABEL(pop_2_error); } } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_OP_ADD_INT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_ADD_INT; (void)(opcode); @@ -177,9 +157,7 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -189,10 +167,8 @@ } // _GUARD_NOS_INT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { @@ -204,7 +180,6 @@ /* Skip 5 cache entries */ // _BINARY_OP_ADD_INT { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -220,17 +195,13 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_OP_ADD_UNICODE) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_ADD_UNICODE; (void)(opcode); @@ -249,9 +220,7 @@ _PyStackRef res; // _GUARD_TOS_UNICODE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -261,10 +230,8 @@ } // _GUARD_NOS_UNICODE { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ tos = value; nos = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { @@ -276,7 +243,6 @@ /* Skip 5 cache entries */ // _BINARY_OP_ADD_UNICODE { - /* Variables=['nos'ML, 'tos'ML]; base=-2; sp=0; logical_sp=0 */ right = tos; left = nos; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -292,17 +258,13 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_OP_EXTEND) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_EXTEND; (void)(opcode); @@ -319,11 +281,8 @@ /* Skip 1 cache entry */ // _GUARD_BINARY_OP_EXTEND { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *descr = read_obj(&this_instr[2].cache); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); @@ -342,7 +301,6 @@ /* Skip -4 cache entry */ // _BINARY_OP_EXTEND { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[2].cache); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); @@ -353,33 +311,24 @@ PyObject *res_o = d->action(left_o, right_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ res = PyStackRef_FromPyObjectSteal(res_o); } - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_OP_INPLACE_ADD_UNICODE) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_INPLACE_ADD_UNICODE; (void)(opcode); @@ -397,9 +346,7 @@ _PyStackRef right; // _GUARD_TOS_UNICODE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -409,10 +356,8 @@ } // _GUARD_NOS_UNICODE { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ tos = value; nos = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { @@ -424,7 +369,6 @@ /* Skip 5 cache entries */ // _BINARY_OP_INPLACE_ADD_UNICODE { - /* Variables=['nos'ML, 'tos'ML]; base=-2; sp=0; logical_sp=0 */ right = tos; left = nos; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -451,7 +395,6 @@ PyObject *right_o = PyStackRef_AsPyObjectSteal(right); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyUnicode_Append(&temp, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -472,7 +415,6 @@ } TARGET(BINARY_OP_MULTIPLY_FLOAT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_MULTIPLY_FLOAT; (void)(opcode); @@ -489,9 +431,7 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -501,10 +441,8 @@ } // _GUARD_NOS_FLOAT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { @@ -516,7 +454,6 @@ /* Skip 5 cache entries */ // _BINARY_OP_MULTIPLY_FLOAT { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -530,17 +467,13 @@ JUMP_TO_LABEL(pop_2_error); } } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_OP_MULTIPLY_INT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_MULTIPLY_INT; (void)(opcode); @@ -557,9 +490,7 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -569,10 +500,8 @@ } // _GUARD_NOS_INT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { @@ -584,7 +513,6 @@ /* Skip 5 cache entries */ // _BINARY_OP_MULTIPLY_INT { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -600,17 +528,13 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_OP_SUBSCR_DICT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_DICT; (void)(opcode); @@ -626,9 +550,7 @@ _PyStackRef res; /* Skip 5 cache entries */ sub_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { @@ -649,35 +571,26 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = sub_st; sub_st = PyStackRef_NULL; - /* Variables=['dict_st'ML, 'sub_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub_st; - /* Variables=['dict_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = dict_st; dict_st = PyStackRef_NULL; - /* Variables=['dict_st'L, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = dict_st; - /* Variables=['dict_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (rc <= 0) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_OP_SUBSCR_GETITEM) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_GETITEM; (void)(opcode); @@ -695,7 +608,6 @@ /* Skip 5 cache entries */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(BINARY_OP); assert(_PyOpcode_Deopt[opcode] == (BINARY_OP)); @@ -704,9 +616,7 @@ } // _BINARY_OP_SUBSCR_CHECK_FUNC { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ container = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container)); if (!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) { UPDATE_MISS_STATS(BINARY_OP); @@ -739,7 +649,6 @@ } // _BINARY_OP_SUBSCR_INIT_CALL { - /* Variables=['container'ML, 'unused'M, 'getitem'L]; base=-2; sp=0; logical_sp=1 */ sub = stack_pointer[-1]; new_frame = _PyFrame_PushUnchecked(tstate, getitem, 2, frame); new_frame->localsplus[0] = container; @@ -748,12 +657,10 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-2; sp=0; logical_sp=-1 */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -767,7 +674,6 @@ } TARGET(BINARY_OP_SUBSCR_LIST_INT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_LIST_INT; (void)(opcode); @@ -784,9 +690,7 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -797,10 +701,8 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBSCR_LIST_INT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ sub_st = value; list_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); @@ -841,26 +743,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = list_st; list_st = res; - /* Variables=['list_st'L, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = list_st; - /* Variables=['list_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = sub_st; sub_st = PyStackRef_NULL; - /* Variables=['list_st'ML, 'sub_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub_st; - /* Variables=['list_st'ML, 'sub_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ } DISPATCH(); } TARGET(BINARY_OP_SUBSCR_STR_INT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_STR_INT; (void)(opcode); @@ -879,9 +775,7 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -891,10 +785,8 @@ } // _GUARD_NOS_UNICODE { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ tos = value; nos = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { @@ -906,7 +798,6 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBSCR_STR_INT { - /* Variables=['nos'ML, 'tos'ML]; base=-2; sp=0; logical_sp=0 */ sub_st = tos; str_st = nos; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); @@ -935,23 +826,18 @@ PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(str_st); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectImmortal(res_o); } - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_OP_SUBSCR_TUPLE_INT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBSCR_TUPLE_INT; (void)(opcode); @@ -968,9 +854,7 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -981,10 +865,8 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBSCR_TUPLE_INT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ sub_st = value; tuple_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st); assert(PyLong_CheckExact(sub)); @@ -1011,13 +893,10 @@ res = PyStackRef_FromPyObjectNew(res_o); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['tuple_st'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = tuple_st; tuple_st = res; - /* Variables=['tuple_st'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = tuple_st; - /* Variables=['tuple_st'ML]; base=-2; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } @@ -1025,7 +904,6 @@ } TARGET(BINARY_OP_SUBTRACT_FLOAT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBTRACT_FLOAT; (void)(opcode); @@ -1042,9 +920,7 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -1054,10 +930,8 @@ } // _GUARD_NOS_FLOAT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { @@ -1069,7 +943,6 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBTRACT_FLOAT { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -1083,17 +956,13 @@ JUMP_TO_LABEL(pop_2_error); } } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_OP_SUBTRACT_INT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_OP_SUBTRACT_INT; (void)(opcode); @@ -1110,9 +979,7 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UPDATE_MISS_STATS(BINARY_OP); @@ -1122,10 +989,8 @@ } // _GUARD_NOS_INT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { @@ -1137,7 +1002,6 @@ /* Skip 5 cache entries */ // _BINARY_OP_SUBTRACT_INT { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -1153,17 +1017,13 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(BINARY_SLICE) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BINARY_SLICE; (void)(opcode); @@ -1177,14 +1037,12 @@ _PyStackRef res; // _SPECIALIZE_BINARY_SLICE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ #if ENABLE_SPECIALIZATION OPCODE_DEFERRED_INC(BINARY_SLICE); #endif /* ENABLE_SPECIALIZATION */ } // _BINARY_SLICE { - /* Variables=['container'M, 'start'M, 'stop'M]; base=-3; sp=0; logical_sp=0 */ stop = stack_pointer[-1]; start = stack_pointer[-2]; container = stack_pointer[-3]; @@ -1199,7 +1057,6 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['container'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); res_o = PyObject_GetItem(PyStackRef_AsPyObjectBorrow(container), slice); Py_DECREF(slice); @@ -1208,7 +1065,6 @@ } stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(container); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1217,17 +1073,13 @@ } res = PyStackRef_FromPyObjectSteal(res_o); } - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } TARGET(BUILD_LIST) { - assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_LIST; (void)(opcode); @@ -1238,7 +1090,6 @@ _PyStackRef *values; _PyStackRef list; values = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *list_o = _PyList_FromStackRefStealOnSuccess(values, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1246,17 +1097,13 @@ JUMP_TO_LABEL(error); } list = PyStackRef_FromPyObjectStealMortal(list_o); - /* Variables=['list'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = list; - /* Variables=['list'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } TARGET(BUILD_MAP) { - assert(STACK_LEVEL() - oparg*2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_MAP; (void)(opcode); @@ -1267,7 +1114,6 @@ _PyStackRef *values; _PyStackRef map; values = &stack_pointer[-oparg*2]; - /* Variables=[]; base=-oparg*2; sp=0; logical_sp=-oparg*2 */ STACKREFS_TO_PYOBJECTS(values, oparg*2, values_o); if (CONVERSION_FAILED(values_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1280,7 +1126,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg*2; sp=-oparg*2; logical_sp=-oparg*2 */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1300,22 +1145,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg*2; sp=-oparg*2; logical_sp=-oparg*2 */ if (map_o == NULL) { JUMP_TO_LABEL(error); } map = PyStackRef_FromPyObjectStealMortal(map_o); - /* Variables=['map'L]; base=-oparg*2; sp=-oparg*2; logical_sp=1 - oparg*2 */ stack_pointer[0] = map; - /* Variables=['map'ML]; base=-oparg*2; sp=-oparg*2; logical_sp=1 - oparg*2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['map'ML]; base=-oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ DISPATCH(); } TARGET(BUILD_SET) { - assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_SET; (void)(opcode); @@ -1326,7 +1166,6 @@ _PyStackRef *values; _PyStackRef set; values = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *set_o = PySet_New(NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1341,7 +1180,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ JUMP_TO_LABEL(error); } int err = 0; @@ -1362,24 +1200,19 @@ if (err) { stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(set_o); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } set = PyStackRef_FromPyObjectStealMortal(set_o); - /* Variables=['set'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = set; - /* Variables=['set'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } TARGET(BUILD_SLICE) { - assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_SLICE; (void)(opcode); @@ -1390,7 +1223,6 @@ _PyStackRef *args; _PyStackRef slice; args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ PyObject *start_o = PyStackRef_AsPyObjectBorrow(args[0]); PyObject *stop_o = PyStackRef_AsPyObjectBorrow(args[1]); PyObject *step_o = oparg == 3 ? PyStackRef_AsPyObjectBorrow(args[2]) : NULL; @@ -1405,22 +1237,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ if (slice_o == NULL) { JUMP_TO_LABEL(error); } slice = PyStackRef_FromPyObjectStealMortal(slice_o); - /* Variables=['slice'L]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer[0] = slice; - /* Variables=['slice'ML]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['slice'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } TARGET(BUILD_STRING) { - assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_STRING; (void)(opcode); @@ -1431,7 +1258,6 @@ _PyStackRef *pieces; _PyStackRef str; pieces = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ STACKREFS_TO_PYOBJECTS(pieces, oparg, pieces_o); if (CONVERSION_FAILED(pieces_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1444,7 +1270,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ JUMP_TO_LABEL(error); } PyObject *str_o = _PyUnicode_JoinArray(&_Py_STR(empty), pieces_o, oparg); @@ -1459,22 +1284,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ if (str_o == NULL) { JUMP_TO_LABEL(error); } str = PyStackRef_FromPyObjectSteal(str_o); - /* Variables=['str'L]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer[0] = str; - /* Variables=['str'ML]; base=-oparg; sp=-oparg; logical_sp=1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['str'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } TARGET(BUILD_TUPLE) { - assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = BUILD_TUPLE; (void)(opcode); @@ -1485,23 +1305,18 @@ _PyStackRef *values; _PyStackRef tup; values = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ PyObject *tup_o = _PyTuple_FromStackRefStealOnSuccess(values, oparg); if (tup_o == NULL) { JUMP_TO_LABEL(error); } tup = PyStackRef_FromPyObjectStealMortal(tup_o); - /* Variables=['tup'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = tup; - /* Variables=['tup'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['tup'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ DISPATCH(); } TARGET(CACHE) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CACHE; (void)(opcode); @@ -1515,7 +1330,6 @@ } TARGET(CALL) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL; (void)(opcode); @@ -1533,11 +1347,8 @@ _PyStackRef res; // _SPECIALIZE_CALL { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -1555,7 +1366,6 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { @@ -1572,7 +1382,6 @@ } // _DO_CALL { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -1595,7 +1404,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -1620,7 +1428,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1670,7 +1477,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -1678,16 +1484,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1697,17 +1499,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_ALLOC_AND_ENTER_INIT) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_ALLOC_AND_ENTER_INIT; (void)(opcode); @@ -1728,7 +1526,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -1737,13 +1534,9 @@ } // _CHECK_AND_ALLOCATE_OBJECT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t type_version = read_u32(&this_instr[2].cache); (void)args; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -1790,7 +1583,6 @@ } // _CREATE_INIT_FRAME { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ self = self_or_null; init = callable; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1806,7 +1598,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FrameClearAndPop(tstate, shim); @@ -1819,7 +1610,6 @@ } // _PUSH_FRAME { - /* Variables=['init_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ new_frame = init_frame; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; @@ -1836,7 +1626,6 @@ } TARGET(CALL_BOUND_METHOD_EXACT_ARGS) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BOUND_METHOD_EXACT_ARGS; (void)(opcode); @@ -1855,7 +1644,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -1864,11 +1652,8 @@ } // _CHECK_CALL_BOUND_METHOD_EXACT_ARGS { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ if (!PyStackRef_IsNull(null[0])) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -1882,7 +1667,6 @@ } // _INIT_CALL_BOUND_METHOD_EXACT_ARGS { - /* Variables=['callable'MLA, 'null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ self_or_null = null; assert(PyStackRef_IsNull(self_or_null[0])); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -1897,7 +1681,6 @@ // flush // _CHECK_FUNCTION_VERSION { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { @@ -1914,7 +1697,6 @@ } // _CHECK_FUNCTION_EXACT_ARGS { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; @@ -1927,7 +1709,6 @@ } // _CHECK_STACK_SPACE { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; @@ -1944,7 +1725,6 @@ } // _INIT_CALL_PY_EXACT_ARGS { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; int has_self = !PyStackRef_IsNull(self_or_null[0]); STAT_INC(CALL, hit); @@ -1957,7 +1737,6 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -1967,12 +1746,10 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -1986,7 +1763,6 @@ } TARGET(CALL_BOUND_METHOD_GENERAL) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BOUND_METHOD_GENERAL; (void)(opcode); @@ -2005,7 +1781,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -2014,11 +1789,8 @@ } // _CHECK_METHOD_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { @@ -2045,7 +1817,6 @@ } // _EXPAND_METHOD { - /* Variables=['callable'MLA, 'null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ self_or_null = null; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyStackRef_IsNull(self_or_null[0])); @@ -2061,7 +1832,6 @@ // flush // _PY_FRAME_GENERAL { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -2080,7 +1850,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -2088,7 +1857,6 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -2098,7 +1866,6 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2114,7 +1881,6 @@ } TARGET(CALL_BUILTIN_CLASS) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BUILTIN_CLASS; (void)(opcode); @@ -2133,13 +1899,9 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_CLASS { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyType_Check(callable_o)) { UPDATE_MISS_STATS(CALL); @@ -2177,7 +1939,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2200,7 +1961,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -2208,16 +1968,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2227,17 +1983,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_BUILTIN_FAST) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BUILTIN_FAST; (void)(opcode); @@ -2256,13 +2008,9 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_FAST { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -2300,7 +2048,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2327,7 +2074,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -2335,16 +2081,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2354,17 +2096,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_BUILTIN_FAST_WITH_KEYWORDS) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BUILTIN_FAST_WITH_KEYWORDS; (void)(opcode); @@ -2383,13 +2121,9 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_FAST_WITH_KEYWORDS { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -2431,7 +2165,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2455,7 +2188,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -2463,16 +2195,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2482,17 +2210,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_BUILTIN_O) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_BUILTIN_O; (void)(opcode); @@ -2511,13 +2235,9 @@ /* Skip 2 cache entries */ // _CALL_BUILTIN_O { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -2557,7 +2277,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2568,16 +2287,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2587,17 +2302,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_FUNCTION_EX) { - assert(STACK_LEVEL() - 4 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_FUNCTION_EX; (void)(opcode); @@ -2620,13 +2331,9 @@ _PyStackRef result; // _MAKE_CALLARGS_A_TUPLE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ kwargs_in = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ callargs = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ func = stack_pointer[-4]; - /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs); if (PyTuple_CheckExact(callargs_o)) { tuple = callargs; @@ -2648,7 +2355,6 @@ kwargs_out = kwargs_in; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func'ML, 'unused'M]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2658,7 +2364,6 @@ } // _DO_CALL_FUNCTION_EX { - /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ kwargs_st = kwargs_out; callargs_st = tuple; null = stack_pointer[-3]; @@ -2675,12 +2380,8 @@ assert(PyTuple_CheckExact(callargs)); PyObject *arg = PyTuple_GET_SIZE(callargs) > 0 ? PyTuple_GET_ITEM(callargs, 0) : &_PyInstrumentation_MISSING; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-2] = callargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-1] = kwargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-4; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -2727,7 +2428,6 @@ PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func)); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex( tstate, func_st, locals, @@ -2735,7 +2435,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -2747,31 +2446,24 @@ assert(PyTuple_CheckExact(callargs)); PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st); assert(kwargs == NULL || PyDict_CheckExact(kwargs)); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-2] = callargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-1] = kwargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-4; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); result_o = PyObject_Call(func, callargs, kwargs); stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML]; base=-4; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(kwargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(func_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2782,16 +2474,12 @@ } // _CHECK_PERIODIC { - /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer[0] = result; - /* Variables=['result'ML]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['result'ML]; base=-4; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2801,17 +2489,13 @@ stack_pointer += -1; } } - /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer[0] = result; - /* Variables=['result'ML]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['result'ML]; base=-4; sp=-3; logical_sp=-3 */ DISPATCH(); } TARGET(CALL_INTRINSIC_1) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_INTRINSIC_1; (void)(opcode); @@ -2822,14 +2506,12 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg <= MAX_INTRINSIC_1); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_UnaryFunctions[oparg].func(tstate, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2837,17 +2519,13 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(CALL_INTRINSIC_2) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_INTRINSIC_2; (void)(opcode); @@ -2859,9 +2537,7 @@ _PyStackRef value1_st; _PyStackRef res; value1_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value2_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ assert(oparg <= MAX_INTRINSIC_2); PyObject *value1 = PyStackRef_AsPyObjectBorrow(value1_st); PyObject *value2 = PyStackRef_AsPyObjectBorrow(value2_st); @@ -2869,35 +2545,26 @@ PyObject *res_o = _PyIntrinsics_BinaryFunctions[oparg].func(tstate, value2, value1); _PyStackRef tmp = value1_st; value1_st = PyStackRef_NULL; - /* Variables=['value2_st'ML, 'value1_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = value1_st; - /* Variables=['value2_st'ML, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = value2_st; value2_st = PyStackRef_NULL; - /* Variables=['value2_st'L, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = value2_st; - /* Variables=['value2_st'ML, 'value1_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(CALL_ISINSTANCE) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_ISINSTANCE; (void)(opcode); @@ -2915,11 +2582,8 @@ /* Skip 1 cache entry */ /* Skip 2 cache entries */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; @@ -2952,9 +2616,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = callable; callable = res; - /* Variables=['callable'L, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-2 - oparg] = callable; - /* Variables=['callable'ML, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -2967,12 +2629,10 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_KW) { - assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_KW; (void)(opcode); @@ -2993,11 +2653,8 @@ _PyStackRef res; // _SPECIALIZE_CALL_KW { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ self_or_null = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -3015,7 +2672,6 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ kwnames_in = stack_pointer[-1]; args = &stack_pointer[-1 - oparg]; (void)args; @@ -3034,7 +2690,6 @@ } // _DO_CALL_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ kwnames = kwnames_out; args = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -3052,9 +2707,7 @@ { int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( tstate, callable[0], locals, @@ -3063,7 +2716,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3079,9 +2731,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -3097,12 +2747,9 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ JUMP_TO_LABEL(error); } - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall( callable_o, args_o, @@ -3136,9 +2783,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -3154,23 +2799,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); } - /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ DISPATCH(); } TARGET(CALL_KW_BOUND_METHOD) { - assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_KW_BOUND_METHOD; (void)(opcode); @@ -3190,7 +2830,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); @@ -3199,11 +2838,8 @@ } // _CHECK_METHOD_VERSION_KW { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ null = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (Py_TYPE(callable_o) != &PyMethod_Type) { @@ -3230,7 +2866,6 @@ } // _EXPAND_METHOD_KW { - /* Variables=['callable'MLA, 'null'MLA, 'unused'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ self_or_null = null; assert(PyStackRef_IsNull(self_or_null[0])); _PyStackRef callable_s = callable[0]; @@ -3246,7 +2881,6 @@ // flush // _PY_FRAME_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'unused'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ kwnames = stack_pointer[-1]; args = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -3269,13 +2903,11 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -3283,7 +2915,6 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -3293,7 +2924,6 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3309,7 +2939,6 @@ } TARGET(CALL_KW_NON_PY) { - assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_KW_NON_PY; (void)(opcode); @@ -3330,9 +2959,7 @@ /* Skip 2 cache entries */ // _CHECK_IS_NOT_PY_CALLABLE_KW { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { UPDATE_MISS_STATS(CALL_KW); @@ -3347,7 +2974,6 @@ } // _CALL_KW_NON_PY { - /* Variables=['callable'MLA, 'unused'MA, 'unused'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ kwnames = stack_pointer[-1]; args = &stack_pointer[-1 - oparg]; self_or_null = &stack_pointer[-2 - oparg]; @@ -3366,9 +2992,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -3384,7 +3008,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ JUMP_TO_LABEL(error); } PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); @@ -3397,7 +3020,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3419,7 +3041,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -3427,16 +3048,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3446,17 +3063,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ DISPATCH(); } TARGET(CALL_KW_PY) { - assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_KW_PY; (void)(opcode); @@ -3475,7 +3088,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); @@ -3484,9 +3096,7 @@ } // _CHECK_FUNCTION_VERSION_KW { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { @@ -3503,7 +3113,6 @@ } // _PY_FRAME_KW { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA, 'kwnames'M]; base=-3 - oparg; sp=0; logical_sp=0 */ kwnames = stack_pointer[-1]; args = &stack_pointer[-1 - oparg]; self_or_null = &stack_pointer[-2 - oparg]; @@ -3527,13 +3136,11 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'MLA, 'self_or_null'MA, 'args'MA]; base=-3 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -3541,7 +3148,6 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -3551,7 +3157,6 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3567,7 +3172,6 @@ } TARGET(CALL_LEN) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_LEN; (void)(opcode); @@ -3585,11 +3189,8 @@ /* Skip 1 cache entry */ /* Skip 2 cache entries */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; if (!PyStackRef_IsNull(self_or_null[0])) { @@ -3626,22 +3227,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_LIST_APPEND) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_LIST_APPEND; (void)(opcode); @@ -3658,11 +3254,8 @@ /* Skip 1 cache entry */ /* Skip 2 cache entries */ arg = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ self = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ assert(oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *self_o = PyStackRef_AsPyObjectBorrow(self); @@ -3688,13 +3281,11 @@ UNLOCK_OBJECT(self_o); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3710,7 +3301,6 @@ } TARGET(CALL_METHOD_DESCRIPTOR_FAST) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_METHOD_DESCRIPTOR_FAST; (void)(opcode); @@ -3729,13 +3319,9 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_FAST { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -3781,7 +3367,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3807,7 +3392,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -3815,16 +3399,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3834,17 +3414,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS; (void)(opcode); @@ -3863,13 +3439,9 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -3916,7 +3488,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3942,7 +3513,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -3950,16 +3520,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3969,17 +3535,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_METHOD_DESCRIPTOR_NOARGS) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_METHOD_DESCRIPTOR_NOARGS; (void)(opcode); @@ -3998,13 +3560,9 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_NOARGS { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ assert(oparg == 0 || oparg == 1); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; @@ -4053,7 +3611,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable[0]); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4064,16 +3621,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4083,17 +3636,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_METHOD_DESCRIPTOR_O) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_METHOD_DESCRIPTOR_O; (void)(opcode); @@ -4112,13 +3661,9 @@ /* Skip 2 cache entries */ // _CALL_METHOD_DESCRIPTOR_O { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -4181,7 +3726,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -4189,16 +3733,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4208,17 +3748,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_NON_PY_GENERAL) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_NON_PY_GENERAL; (void)(opcode); @@ -4238,9 +3774,7 @@ /* Skip 2 cache entries */ // _CHECK_IS_NOT_PY_CALLABLE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (PyFunction_Check(callable_o)) { UPDATE_MISS_STATS(CALL); @@ -4255,7 +3789,6 @@ } // _CALL_NON_PY_GENERAL { - /* Variables=['callable'MLA, 'unused'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; self_or_null = &stack_pointer[-1 - oparg]; #if TIER_ONE @@ -4286,7 +3819,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4313,7 +3845,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -4321,16 +3852,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4340,17 +3867,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(CALL_PY_EXACT_ARGS) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_PY_EXACT_ARGS; (void)(opcode); @@ -4368,7 +3891,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -4377,9 +3899,7 @@ } // _CHECK_FUNCTION_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { @@ -4396,7 +3916,6 @@ } // _CHECK_FUNCTION_EXACT_ARGS { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ self_or_null = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); assert(PyFunction_Check(callable_o)); @@ -4410,7 +3929,6 @@ } // _CHECK_STACK_SPACE { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; @@ -4427,7 +3945,6 @@ } // _INIT_CALL_PY_EXACT_ARGS { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; self_or_null = &stack_pointer[-1 - oparg]; int has_self = !PyStackRef_IsNull(self_or_null[0]); @@ -4441,7 +3958,6 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -4451,12 +3967,10 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -4470,7 +3984,6 @@ } TARGET(CALL_PY_GENERAL) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_PY_GENERAL; (void)(opcode); @@ -4488,7 +4001,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -4497,9 +4009,7 @@ } // _CHECK_FUNCTION_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = read_u32(&this_instr[2].cache); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); if (!PyFunction_Check(callable_o)) { @@ -4516,7 +4026,6 @@ } // _PY_FRAME_GENERAL { - /* Variables=['callable'MLA, 'self_or_null'MA, 'unused'MA]; base=-2 - oparg; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; self_or_null = &stack_pointer[-1 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -4536,7 +4045,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (temp == NULL) { JUMP_TO_LABEL(error); } @@ -4544,7 +4052,6 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -4554,7 +4061,6 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4570,7 +4076,6 @@ } TARGET(CALL_STR_1) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_STR_1; (void)(opcode); @@ -4589,13 +4094,9 @@ /* Skip 2 cache entries */ // _CALL_STR_1 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ arg = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ null = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); @@ -4615,7 +4116,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4626,16 +4126,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4645,17 +4141,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } TARGET(CALL_TUPLE_1) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_TUPLE_1; (void)(opcode); @@ -4674,13 +4166,9 @@ /* Skip 2 cache entries */ // _CALL_TUPLE_1 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ arg = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ null = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); @@ -4700,7 +4188,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4711,16 +4198,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4730,17 +4213,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } TARGET(CALL_TYPE_1) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CALL_TYPE_1; (void)(opcode); @@ -4758,11 +4237,8 @@ /* Skip 1 cache entry */ /* Skip 2 cache entries */ arg = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ null = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ callable = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); @@ -4778,12 +4254,9 @@ } STAT_INC(CALL, hit); res = PyStackRef_FromPyObjectNew(Py_TYPE(arg_o)); - /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; - /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4791,7 +4264,6 @@ } TARGET(CHECK_EG_MATCH) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CHECK_EG_MATCH; (void)(opcode); @@ -4804,9 +4276,7 @@ _PyStackRef rest; _PyStackRef match; match_type_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ exc_value_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); PyObject *match_type = PyStackRef_AsPyObjectBorrow(match_type_st); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4816,20 +4286,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; - /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match_type_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; - /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = exc_value_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ JUMP_TO_LABEL(error); } PyObject *match_o = NULL; @@ -4839,20 +4304,15 @@ &match_o, &rest_o); _PyStackRef tmp = match_type_st; match_type_st = PyStackRef_NULL; - /* Variables=['exc_value_st'ML, 'match_type_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match_type_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; - /* Variables=['exc_value_st'L, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = exc_value_st; - /* Variables=['exc_value_st'ML, 'match_type_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_LABEL(error); } @@ -4867,20 +4327,14 @@ } rest = PyStackRef_FromPyObjectSteal(rest_o); match = PyStackRef_FromPyObjectSteal(match_o); - /* Variables=['rest'L, 'match'L]; base=-2; sp=-2; logical_sp=0 */ stack_pointer[0] = rest; - /* Variables=['rest'ML, 'match'L]; base=-2; sp=-2; logical_sp=0 */ - /* Variables=['rest'ML, 'match'L]; base=-2; sp=-2; logical_sp=0 */ stack_pointer[1] = match; - /* Variables=['rest'ML, 'match'ML]; base=-2; sp=-2; logical_sp=0 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['rest'ML, 'match'ML]; base=-2; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(CHECK_EXC_MATCH) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CHECK_EXC_MATCH; (void)(opcode); @@ -4892,9 +4346,7 @@ _PyStackRef right; _PyStackRef b; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyExceptionInstance_Check(left_o)); @@ -4909,22 +4361,17 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(right); stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; - /* Variables=['left'ML, 'b'L]; base=-2; sp=-1; logical_sp=0 */ stack_pointer[0] = b; - /* Variables=['left'ML, 'b'ML]; base=-2; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['left'ML, 'b'ML]; base=-2; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(CLEANUP_THROW) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CLEANUP_THROW; (void)(opcode); @@ -4940,11 +4387,8 @@ _PyStackRef none; _PyStackRef value; exc_value_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ last_sent_val = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ sub_iter = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); #if !Py_TAIL_CALL_INTERP assert(throwflag); @@ -4958,26 +4402,19 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = sub_iter; sub_iter = value; - /* Variables=['sub_iter'L, 'last_sent_val'ML, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = sub_iter; - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = exc_value_st; exc_value_st = PyStackRef_NULL; - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = exc_value_st; - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = last_sent_val; last_sent_val = PyStackRef_NULL; - /* Variables=['sub_iter'ML, 'last_sent_val'L, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = last_sent_val; - /* Variables=['sub_iter'ML, 'last_sent_val'ML, 'exc_value_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ none = PyStackRef_None; } else { @@ -4986,20 +4423,14 @@ monitor_reraise(tstate, frame, this_instr); JUMP_TO_LABEL(exception_unwind); } - /* Variables=['none'L, 'value'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[0] = none; - /* Variables=['none'ML, 'value'L]; base=-3; sp=-3; logical_sp=-1 */ - /* Variables=['none'ML, 'value'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[1] = value; - /* Variables=['none'ML, 'value'ML]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['none'ML, 'value'ML]; base=-3; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(COMPARE_OP) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COMPARE_OP; (void)(opcode); @@ -5015,11 +4446,8 @@ _PyStackRef res; // _SPECIALIZE_COMPARE_OP { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -5036,7 +4464,6 @@ } // _COMPARE_OP { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert((oparg >> 5) <= Py_GE); @@ -5044,20 +4471,15 @@ PyObject *res_o = PyObject_RichCompare(left_o, right_o, oparg >> 5); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -5075,17 +4497,13 @@ res = PyStackRef_FromPyObjectSteal(res_o); } } - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(COMPARE_OP_FLOAT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COMPARE_OP_FLOAT; (void)(opcode); @@ -5102,9 +4520,7 @@ _PyStackRef res; // _GUARD_TOS_FLOAT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UPDATE_MISS_STATS(COMPARE_OP); @@ -5114,10 +4530,8 @@ } // _GUARD_NOS_FLOAT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { @@ -5129,7 +4543,6 @@ /* Skip 1 cache entry */ // _COMPARE_OP_FLOAT { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); STAT_INC(COMPARE_OP, hit); @@ -5140,17 +4553,13 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(COMPARE_OP_INT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COMPARE_OP_INT; (void)(opcode); @@ -5167,9 +4576,7 @@ _PyStackRef res; // _GUARD_TOS_INT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UPDATE_MISS_STATS(COMPARE_OP); @@ -5179,10 +4586,8 @@ } // _GUARD_NOS_INT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ right = value; left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)right; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { @@ -5194,7 +4599,6 @@ /* Skip 1 cache entry */ // _COMPARE_OP_INT { - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { @@ -5217,17 +4621,13 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(COMPARE_OP_STR) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COMPARE_OP_STR; (void)(opcode); @@ -5246,9 +4646,7 @@ _PyStackRef res; // _GUARD_TOS_UNICODE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UPDATE_MISS_STATS(COMPARE_OP); @@ -5258,10 +4656,8 @@ } // _GUARD_NOS_UNICODE { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ tos = value; nos = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)tos; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { @@ -5273,7 +4669,6 @@ /* Skip 1 cache entry */ // _COMPARE_OP_STR { - /* Variables=['nos'ML, 'tos'ML]; base=-2; sp=0; logical_sp=0 */ right = tos; left = nos; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -5288,17 +4683,13 @@ assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(CONTAINS_OP) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CONTAINS_OP; (void)(opcode); @@ -5314,9 +4705,7 @@ _PyStackRef b; // _SPECIALIZE_CONTAINS_OP { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -5333,7 +4722,6 @@ } // _CONTAINS_OP { - /* Variables=['left'M, 'right'ML]; base=-2; sp=0; logical_sp=0 */ left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); @@ -5341,36 +4729,27 @@ int res = PySequence_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_LABEL(error); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; } - /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; - /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(CONTAINS_OP_DICT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CONTAINS_OP_DICT; (void)(opcode); @@ -5386,9 +4765,7 @@ _PyStackRef b; /* Skip 1 cache entry */ right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!PyDict_CheckExact(right_o)) { @@ -5401,35 +4778,26 @@ int res = PyDict_Contains(right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_LABEL(error); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; - /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(CONTAINS_OP_SET) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CONTAINS_OP_SET; (void)(opcode); @@ -5445,9 +4813,7 @@ _PyStackRef b; /* Skip 1 cache entry */ right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!(PySet_CheckExact(right_o) || PyFrozenSet_CheckExact(right_o))) { @@ -5460,35 +4826,26 @@ int res = _PySet_Contains((PySetObject *)right_o, left_o); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res < 0) { JUMP_TO_LABEL(error); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; - /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(CONVERT_VALUE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = CONVERT_VALUE; (void)(opcode); @@ -5499,7 +4856,6 @@ _PyStackRef value; _PyStackRef result; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ conversion_func conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = _PyEval_ConversionFuncs[oparg]; @@ -5508,7 +4864,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5516,17 +4871,13 @@ JUMP_TO_LABEL(error); } result = PyStackRef_FromPyObjectSteal(result_o); - /* Variables=['result'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = result; - /* Variables=['result'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['result'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(COPY) { - assert(STACK_LEVEL() - 1 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = COPY; (void)(opcode); @@ -5537,20 +4888,15 @@ _PyStackRef bottom; _PyStackRef top; bottom = stack_pointer[-1 - (oparg-1)]; - /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ assert(oparg > 0); top = PyStackRef_DUP(bottom); - /* Variables=['bottom'ML, 'unused'MA, 'top'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer[0] = top; - /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ DISPATCH(); } TARGET(COPY_FREE_VARS) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = COPY_FREE_VARS; (void)(opcode); @@ -5572,7 +4918,6 @@ } TARGET(DELETE_ATTR) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_ATTR; (void)(opcode); @@ -5582,14 +4927,12 @@ INSTRUCTION_STATS(DELETE_ATTR); _PyStackRef owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5600,7 +4943,6 @@ } TARGET(DELETE_DEREF) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_DEREF; (void)(opcode); @@ -5623,7 +4965,6 @@ } TARGET(DELETE_FAST) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_FAST; (void)(opcode); @@ -5650,7 +4991,6 @@ } TARGET(DELETE_GLOBAL) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_GLOBAL; (void)(opcode); @@ -5676,7 +5016,6 @@ } TARGET(DELETE_NAME) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_NAME; (void)(opcode); @@ -5709,7 +5048,6 @@ } TARGET(DELETE_SUBSCR) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = DELETE_SUBSCR; (void)(opcode); @@ -5720,28 +5058,21 @@ _PyStackRef container; _PyStackRef sub; sub = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ container = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; - /* Variables=['container'ML, 'sub'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = sub; - /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; - /* Variables=['container'L, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = container; - /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (err) { JUMP_TO_LABEL(error); } @@ -5749,7 +5080,6 @@ } TARGET(DICT_MERGE) { - assert(STACK_LEVEL() - 5 + (oparg - 1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = DICT_MERGE; (void)(opcode); @@ -5761,11 +5091,8 @@ _PyStackRef dict; _PyStackRef update; update = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict = stack_pointer[-2 - (oparg - 1)]; - /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ callable = stack_pointer[-5 - (oparg - 1)]; - /* Variables=[]; base=-5 - (oparg - 1); sp=0; logical_sp=-5 - (oparg - 1) */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); @@ -5778,7 +5105,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5786,7 +5112,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable'ML, 'unused'M, 'unused'M, 'dict'ML, 'unused'MA]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5794,7 +5119,6 @@ } TARGET(DICT_UPDATE) { - assert(STACK_LEVEL() - 2 + (oparg - 1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = DICT_UPDATE; (void)(opcode); @@ -5805,9 +5129,7 @@ _PyStackRef dict; _PyStackRef update; update = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict = stack_pointer[-2 - (oparg - 1)]; - /* Variables=[]; base=-2 - (oparg - 1); sp=0; logical_sp=-2 - (oparg - 1) */ PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5826,7 +5148,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5834,7 +5155,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict'ML, 'unused'MA]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5842,7 +5162,6 @@ } TARGET(END_ASYNC_FOR) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = END_ASYNC_FOR; (void)(opcode); @@ -5855,9 +5174,7 @@ _PyStackRef awaitable_st; _PyStackRef exc_st; exc_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ awaitable_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ JUMPBY(0); (void)oparg; PyObject *exc = PyStackRef_AsPyObjectBorrow(exc_st); @@ -5869,20 +5186,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = exc_st; exc_st = PyStackRef_NULL; - /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = exc_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = awaitable_st; awaitable_st = PyStackRef_NULL; - /* Variables=['awaitable_st'L, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = awaitable_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ } else { Py_INCREF(exc); @@ -5895,7 +5207,6 @@ } TARGET(END_FOR) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = END_FOR; (void)(opcode); @@ -5904,10 +5215,8 @@ INSTRUCTION_STATS(END_FOR); _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5915,7 +5224,6 @@ } TARGET(END_SEND) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = END_SEND; (void)(opcode); @@ -5927,17 +5235,12 @@ _PyStackRef value; _PyStackRef val; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ receiver = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ (void)receiver; val = value; - /* Variables=['val'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = val; - /* Variables=['val'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(receiver); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5945,7 +5248,6 @@ } TARGET(ENTER_EXECUTOR) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = ENTER_EXECUTOR; (void)(opcode); @@ -5982,7 +5284,6 @@ } TARGET(EXIT_INIT_CHECK) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = EXIT_INIT_CHECK; (void)(opcode); @@ -5992,7 +5293,6 @@ INSTRUCTION_STATS(EXIT_INIT_CHECK); _PyStackRef should_be_none; should_be_none = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_IsNone(should_be_none)) { _PyFrame_SetStackPointer(frame, stack_pointer); PyErr_Format(PyExc_TypeError, @@ -6003,12 +5303,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(EXTENDED_ARG) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = EXTENDED_ARG; (void)(opcode); @@ -6025,7 +5323,6 @@ } TARGET(FORMAT_SIMPLE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FORMAT_SIMPLE; (void)(opcode); @@ -6036,7 +5333,6 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6044,7 +5340,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6057,17 +5352,13 @@ res = value; stack_pointer += -1; } - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(FORMAT_WITH_SPEC) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FORMAT_WITH_SPEC; (void)(opcode); @@ -6079,42 +5370,31 @@ _PyStackRef fmt_spec; _PyStackRef res; fmt_spec = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(PyStackRef_AsPyObjectBorrow(value), PyStackRef_AsPyObjectBorrow(fmt_spec)); _PyStackRef tmp = fmt_spec; fmt_spec = PyStackRef_NULL; - /* Variables=['value'ML, 'fmt_spec'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = fmt_spec; - /* Variables=['value'ML, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = value; value = PyStackRef_NULL; - /* Variables=['value'L, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = value; - /* Variables=['value'ML, 'fmt_spec'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(FOR_ITER) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER; (void)(opcode); @@ -6129,9 +5409,7 @@ _PyStackRef next; // _SPECIALIZE_FOR_ITER { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -6148,7 +5426,6 @@ } // _FOR_ITER { - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o); @@ -6173,17 +5450,13 @@ } next = PyStackRef_FromPyObjectSteal(next_o); } - /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(FOR_ITER_GEN) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER_GEN; (void)(opcode); @@ -6200,7 +5473,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(FOR_ITER); assert(_PyOpcode_Deopt[opcode] == (FOR_ITER)); @@ -6209,9 +5481,7 @@ } // _FOR_ITER_GEN_FRAME { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(gen) != &PyGen_Type) { UPDATE_MISS_STATS(FOR_ITER); @@ -6241,7 +5511,6 @@ } // _PUSH_FRAME { - /* Variables=['iter'ML, 'gen_frame'L]; base=-1; sp=0; logical_sp=1 */ new_frame = gen_frame; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; @@ -6258,7 +5527,6 @@ } TARGET(FOR_ITER_LIST) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER_LIST; (void)(opcode); @@ -6274,9 +5542,7 @@ /* Skip 1 cache entry */ // _ITER_CHECK_LIST { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyListIter_Type) { UPDATE_MISS_STATS(FOR_ITER); @@ -6300,7 +5566,6 @@ } // _ITER_JUMP_LIST { - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(iter_o) == &PyListIter_Type); #ifdef Py_GIL_DISABLED @@ -6325,7 +5590,6 @@ } // _ITER_NEXT_LIST { - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyListIterObject *it = (_PyListIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyListIter_Type); @@ -6355,17 +5619,13 @@ next = PyStackRef_FromPyObjectNew(PyList_GET_ITEM(seq, it->it_index++)); #endif } - /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(FOR_ITER_RANGE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER_RANGE; (void)(opcode); @@ -6381,9 +5641,7 @@ /* Skip 1 cache entry */ // _ITER_CHECK_RANGE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { UPDATE_MISS_STATS(FOR_ITER); @@ -6400,7 +5658,6 @@ } // _ITER_JUMP_RANGE { - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); #ifdef Py_GIL_DISABLED @@ -6414,7 +5671,6 @@ } // _ITER_NEXT_RANGE { - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); #ifdef Py_GIL_DISABLED @@ -6430,17 +5686,13 @@ } next = PyStackRef_FromPyObjectSteal(res); } - /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(FOR_ITER_TUPLE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = FOR_ITER_TUPLE; (void)(opcode); @@ -6456,9 +5708,7 @@ /* Skip 1 cache entry */ // _ITER_CHECK_TUPLE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTupleIter_Type) { UPDATE_MISS_STATS(FOR_ITER); @@ -6475,7 +5725,6 @@ } // _ITER_JUMP_TUPLE { - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); (void)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -6501,7 +5750,6 @@ } // _ITER_NEXT_TUPLE { - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyTupleIterObject *it = (_PyTupleIterObject *)iter_o; assert(Py_TYPE(iter_o) == &PyTupleIter_Type); @@ -6513,17 +5761,13 @@ assert(it->it_index < PyTuple_GET_SIZE(seq)); next = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq, it->it_index++)); } - /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(GET_AITER) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_AITER; (void)(opcode); @@ -6534,7 +5778,6 @@ _PyStackRef obj; _PyStackRef iter; obj = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ unaryfunc getter = NULL; PyObject *obj_o = PyStackRef_AsPyObjectBorrow(obj); PyObject *iter_o; @@ -6551,7 +5794,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6562,7 +5804,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6581,17 +5822,13 @@ JUMP_TO_LABEL(error); } iter = PyStackRef_FromPyObjectSteal(iter_o); - /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(GET_ANEXT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_ANEXT; (void)(opcode); @@ -6602,7 +5839,6 @@ _PyStackRef aiter; _PyStackRef awaitable; aiter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *awaitable_o = _PyEval_GetANext(PyStackRef_AsPyObjectBorrow(aiter)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6610,17 +5846,13 @@ JUMP_TO_LABEL(error); } awaitable = PyStackRef_FromPyObjectSteal(awaitable_o); - /* Variables=['aiter'ML, 'awaitable'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = awaitable; - /* Variables=['aiter'ML, 'awaitable'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['aiter'ML, 'awaitable'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(GET_AWAITABLE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_AWAITABLE; (void)(opcode); @@ -6631,13 +5863,11 @@ _PyStackRef iterable; _PyStackRef iter; iterable = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6645,17 +5875,13 @@ JUMP_TO_LABEL(error); } iter = PyStackRef_FromPyObjectSteal(iter_o); - /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(GET_ITER) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_ITER; (void)(opcode); @@ -6666,13 +5892,11 @@ _PyStackRef iterable; _PyStackRef iter; iterable = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6680,17 +5904,13 @@ JUMP_TO_LABEL(error); } iter = PyStackRef_FromPyObjectSteal(iter_o); - /* Variables=['iter'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = iter; - /* Variables=['iter'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(GET_LEN) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_LEN; (void)(opcode); @@ -6701,7 +5921,6 @@ _PyStackRef obj; _PyStackRef len; obj = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); Py_ssize_t len_i = PyObject_Length(PyStackRef_AsPyObjectBorrow(obj)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6713,17 +5932,13 @@ JUMP_TO_LABEL(error); } len = PyStackRef_FromPyObjectSteal(len_o); - /* Variables=['obj'ML, 'len'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = len; - /* Variables=['obj'ML, 'len'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['obj'ML, 'len'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(GET_YIELD_FROM_ITER) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = GET_YIELD_FROM_ITER; (void)(opcode); @@ -6734,7 +5949,6 @@ _PyStackRef iterable; _PyStackRef iter; iterable = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); if (PyCoro_CheckExact(iterable_o)) { if (!(_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE))) { @@ -6761,20 +5975,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = iterable; iterable = iter; - /* Variables=['iterable'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iterable; - /* Variables=['iterable'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } - /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(IMPORT_FROM) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = IMPORT_FROM; (void)(opcode); @@ -6785,7 +5994,6 @@ _PyStackRef from; _PyStackRef res; from = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportFrom(tstate, PyStackRef_AsPyObjectBorrow(from), name); @@ -6794,17 +6002,13 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['from'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['from'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['from'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(IMPORT_NAME) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = IMPORT_NAME; (void)(opcode); @@ -6816,9 +6020,7 @@ _PyStackRef fromlist; _PyStackRef res; fromlist = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ level = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportName(tstate, frame, name, @@ -6826,35 +6028,26 @@ PyStackRef_AsPyObjectBorrow(level)); _PyStackRef tmp = fromlist; fromlist = PyStackRef_NULL; - /* Variables=['level'ML, 'fromlist'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = fromlist; - /* Variables=['level'ML, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = level; level = PyStackRef_NULL; - /* Variables=['level'L, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = level; - /* Variables=['level'ML, 'fromlist'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(INSTRUMENTED_CALL) { - assert(STACK_LEVEL() - 2 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_CALL; (void)(opcode); @@ -6874,13 +6067,9 @@ /* Skip 3 cache entries */ // _MAYBE_EXPAND_METHOD { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -6896,7 +6085,6 @@ } // _MONITOR_CALL { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA]; base=-2 - oparg; sp=0; logical_sp=0 */ maybe_self = self_or_null; func = callable; int is_meth = !PyStackRef_IsNull(maybe_self[0]); @@ -6923,13 +6111,9 @@ } // _DO_CALL { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); int total_args = oparg; _PyStackRef *arguments = args; @@ -6951,7 +6135,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -6976,7 +6159,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -7026,7 +6208,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } @@ -7034,16 +6215,12 @@ } // _CHECK_PERIODIC { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7053,17 +6230,13 @@ stack_pointer += -1; } } - /* Variables=['res'L]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=-2 - oparg; logical_sp=-1 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ DISPATCH(); } TARGET(INSTRUMENTED_CALL_FUNCTION_EX) { - assert(STACK_LEVEL() - 4 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_CALL_FUNCTION_EX; (void)(opcode); @@ -7086,13 +6259,9 @@ _PyStackRef result; // _MAKE_CALLARGS_A_TUPLE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ kwargs_in = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ callargs = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ func = stack_pointer[-4]; - /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs); if (PyTuple_CheckExact(callargs_o)) { tuple = callargs; @@ -7114,7 +6283,6 @@ kwargs_out = kwargs_in; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func'ML, 'unused'M]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7124,7 +6292,6 @@ } // _DO_CALL_FUNCTION_EX { - /* Variables=['func'ML, 'unused'M, 'tuple'L, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ kwargs_st = kwargs_out; callargs_st = tuple; null = stack_pointer[-3]; @@ -7141,12 +6308,8 @@ assert(PyTuple_CheckExact(callargs)); PyObject *arg = PyTuple_GET_SIZE(callargs) > 0 ? PyTuple_GET_ITEM(callargs, 0) : &_PyInstrumentation_MISSING; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-2] = callargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-1] = kwargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-4; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -7193,7 +6356,6 @@ PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func)); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex( tstate, func_st, locals, @@ -7201,7 +6363,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ if (new_frame == NULL) { JUMP_TO_LABEL(error); } @@ -7213,31 +6374,24 @@ assert(PyTuple_CheckExact(callargs)); PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st); assert(kwargs == NULL || PyDict_CheckExact(kwargs)); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'L, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-2] = callargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-1] = kwargs_st; - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML, 'kwargs_st'ML]; base=-4; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); result_o = PyObject_Call(func, callargs, kwargs); stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML, 'callargs_st'ML]; base=-4; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(kwargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_st'ML, 'null'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callargs_st); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(func_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7248,16 +6402,12 @@ } // _CHECK_PERIODIC { - /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { - /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer[0] = result; - /* Variables=['result'ML]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['result'ML]; base=-4; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7267,17 +6417,13 @@ stack_pointer += -1; } } - /* Variables=['result'L]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer[0] = result; - /* Variables=['result'ML]; base=-4; sp=-4; logical_sp=-3 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['result'ML]; base=-4; sp=-3; logical_sp=-3 */ DISPATCH(); } TARGET(INSTRUMENTED_CALL_KW) { - assert(STACK_LEVEL() - 3 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_CALL_KW; (void)(opcode); @@ -7299,15 +6445,10 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD_KW { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ kwnames_in = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ args = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ self_or_null = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable = &stack_pointer[-3 - oparg]; - /* Variables=[]; base=-3 - oparg; sp=0; logical_sp=-3 - oparg */ (void)args; if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); @@ -7324,7 +6465,6 @@ } // _MONITOR_CALL_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ int is_meth = !PyStackRef_IsNull(self_or_null[0]); PyObject *arg; if (is_meth) { @@ -7337,9 +6477,7 @@ arg = &_PyInstrumentation_MISSING; } PyObject *function = PyStackRef_AsPyObjectBorrow(callable[0]); - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames_out; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -7351,7 +6489,6 @@ } // _DO_CALL_KW { - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames_out'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ kwnames = kwnames_out; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); @@ -7376,7 +6513,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(kwnames); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7392,9 +6528,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -7410,7 +6544,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ JUMP_TO_LABEL(error); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -7446,9 +6579,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames; - /* Variables=['callable'MLA, 'self_or_null'MLA, 'args'MLA, 'kwnames'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -7464,23 +6595,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-3 - oparg */ if (res_o == NULL) { JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); } - /* Variables=['res'L]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-3 - oparg; sp=-3 - oparg; logical_sp=-2 - oparg */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ DISPATCH(); } TARGET(INSTRUMENTED_END_ASYNC_FOR) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_END_ASYNC_FOR; (void)(opcode); @@ -7494,17 +6620,13 @@ _PyStackRef exc_st; // _MONITOR_END_ASYNC_FOR { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ assert((next_instr-oparg)->op.code == END_SEND || (next_instr-oparg)->op.code >= MIN_INSTRUMENTED_OPCODE); INSTRUMENTED_JUMP(next_instr-oparg, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT); } // _END_ASYNC_FOR { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ exc_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ awaitable_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ JUMPBY(0); (void)oparg; PyObject *exc = PyStackRef_AsPyObjectBorrow(exc_st); @@ -7516,20 +6638,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = exc_st; exc_st = PyStackRef_NULL; - /* Variables=['awaitable_st'ML, 'exc_st'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = exc_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = awaitable_st; awaitable_st = PyStackRef_NULL; - /* Variables=['awaitable_st'L, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = awaitable_st; - /* Variables=['awaitable_st'ML, 'exc_st'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ } else { Py_INCREF(exc); @@ -7543,7 +6660,6 @@ } TARGET(INSTRUMENTED_END_FOR) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_END_FOR; (void)(opcode); @@ -7555,9 +6671,7 @@ _PyStackRef receiver; _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ receiver = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (PyStackRef_GenCheck(receiver)) { _PyFrame_SetStackPointer(frame, stack_pointer); int err = monitor_stop_iteration(tstate, frame, this_instr, PyStackRef_AsPyObjectBorrow(value)); @@ -7568,7 +6682,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7576,7 +6689,6 @@ } TARGET(INSTRUMENTED_END_SEND) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_END_SEND; (void)(opcode); @@ -7590,9 +6702,7 @@ _PyStackRef value; _PyStackRef val; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ receiver = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); if (PyGen_Check(receiver_o) || PyCoro_CheckExact(receiver_o)) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -7603,12 +6713,9 @@ } } val = value; - /* Variables=['val'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = val; - /* Variables=['val'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(receiver); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7616,7 +6723,6 @@ } TARGET(INSTRUMENTED_FOR_ITER) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_FOR_ITER; (void)(opcode); @@ -7630,7 +6736,6 @@ _PyStackRef next; /* Skip 1 cache entry */ iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o); @@ -7657,17 +6762,13 @@ JUMPBY(oparg + 1); DISPATCH(); } - /* Variables=['iter'ML, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'ML, 'next'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(INSTRUMENTED_INSTRUCTION) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_INSTRUCTION; (void)(opcode); @@ -7695,7 +6796,6 @@ } TARGET(INSTRUMENTED_JUMP_BACKWARD) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_JUMP_BACKWARD; (void)(opcode); @@ -7708,7 +6808,6 @@ /* Skip 1 cache entry */ // _CHECK_PERIODIC { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { @@ -7722,14 +6821,12 @@ } // _MONITOR_JUMP_BACKWARD { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ INSTRUMENTED_JUMP(this_instr, next_instr - oparg, PY_MONITORING_EVENT_JUMP); } DISPATCH(); } TARGET(INSTRUMENTED_JUMP_FORWARD) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_JUMP_FORWARD; (void)(opcode); @@ -7744,7 +6841,6 @@ } TARGET(INSTRUMENTED_LINE) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_LINE; (void)(opcode); @@ -7785,7 +6881,6 @@ } TARGET(INSTRUMENTED_LOAD_SUPER_ATTR) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_LOAD_SUPER_ATTR; (void)(opcode); @@ -7804,13 +6899,9 @@ /* Skip 1 cache entry */ // _LOAD_SUPER_ATTR { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ self_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ class_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ global_super_st = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); @@ -7825,26 +6916,19 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ JUMP_TO_LABEL(error); } } @@ -7877,26 +6961,19 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (super == NULL) { JUMP_TO_LABEL(error); } @@ -7912,23 +6989,18 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'L]; base=-3; sp=-3; logical_sp=-2 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - /* Variables=['attr'L, 'null'A]; base=-3; sp=-3; logical_sp=-2 + (oparg & 1) */ stack_pointer[0] = attr; - /* Variables=['attr'ML, 'null'A]; base=-3; sp=-3; logical_sp=-2 + (oparg & 1) */ stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-3; sp=-2 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ DISPATCH(); } TARGET(INSTRUMENTED_NOT_TAKEN) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_NOT_TAKEN; (void)(opcode); @@ -7945,7 +7017,6 @@ } TARGET(INSTRUMENTED_POP_ITER) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_ITER; (void)(opcode); @@ -7958,11 +7029,9 @@ INSTRUCTION_STATS(INSTRUMENTED_POP_ITER); _PyStackRef iter; iter = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ INSTRUMENTED_JUMP(prev_instr, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iter); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7970,7 +7039,6 @@ } TARGET(INSTRUMENTED_POP_JUMP_IF_FALSE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_JUMP_IF_FALSE; (void)(opcode); @@ -7983,7 +7051,6 @@ _PyStackRef cond; /* Skip 1 cache entry */ cond = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(cond)); int jump = PyStackRef_IsFalse(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); @@ -7992,12 +7059,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_NONE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_JUMP_IF_NONE; (void)(opcode); @@ -8010,7 +7075,6 @@ _PyStackRef value; /* Skip 1 cache entry */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int jump = PyStackRef_IsNone(value); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { @@ -8019,7 +7083,6 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8027,12 +7090,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_NOT_NONE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_JUMP_IF_NOT_NONE; (void)(opcode); @@ -8045,13 +7106,11 @@ _PyStackRef value; /* Skip 1 cache entry */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int jump = !PyStackRef_IsNone(value); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); if (jump) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8064,7 +7123,6 @@ } TARGET(INSTRUMENTED_POP_JUMP_IF_TRUE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_POP_JUMP_IF_TRUE; (void)(opcode); @@ -8077,7 +7135,6 @@ _PyStackRef cond; /* Skip 1 cache entry */ cond = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(cond)); int jump = PyStackRef_IsTrue(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, jump); @@ -8086,12 +7143,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(INSTRUMENTED_RESUME) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_RESUME; (void)(opcode); @@ -8103,7 +7158,6 @@ INSTRUCTION_STATS(INSTRUMENTED_RESUME); // _LOAD_BYTECODE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { @@ -8124,7 +7178,6 @@ } // _MAYBE_INSTRUMENT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->tracing == 0) { uintptr_t global_version = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & ~_PY_EVAL_EVENTS_MASK; uintptr_t code_version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); @@ -8142,7 +7195,6 @@ } // _CHECK_PERIODIC_IF_NOT_YIELD_FROM { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); @@ -8158,7 +7210,6 @@ } // _MONITOR_RESUME { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation( tstate, oparg > 0, frame, this_instr); @@ -8174,7 +7225,6 @@ } TARGET(INSTRUMENTED_RETURN_VALUE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_RETURN_VALUE; (void)(opcode); @@ -8189,9 +7239,7 @@ _PyStackRef res; // _RETURN_VALUE_EVENT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ val = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_arg( tstate, PY_MONITORING_EVENT_PY_RETURN, @@ -8203,15 +7251,13 @@ } // _RETURN_VALUE { - /* Variables=['val'ML]; base=-1; sp=0; logical_sp=0 */ retval = val; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); - assert(EMPTY()); + assert(STACK_LEVEL() == 0); _Py_LeaveRecursiveCallPy(tstate); _PyInterpreterFrame *dying = frame; frame = tstate->current_frame = dying->previous; @@ -8221,17 +7267,13 @@ res = temp; LLTRACE_RESUME_FRAME(); } - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(INSTRUMENTED_YIELD_VALUE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = INSTRUMENTED_YIELD_VALUE; (void)(opcode); @@ -8246,9 +7288,7 @@ _PyStackRef value; // _YIELD_VALUE_EVENT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ val = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_arg( tstate, PY_MONITORING_EVENT_PY_YIELD, @@ -8264,7 +7304,6 @@ } // _YIELD_VALUE { - /* Variables=['val'ML]; base=-1; sp=0; logical_sp=0 */ retval = val; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); frame->instr_ptr++; @@ -8275,7 +7314,6 @@ _PyStackRef temp = retval; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); tstate->exc_info = gen->gi_exc_state.previous_item; gen->gi_exc_state.previous_item = NULL; @@ -8297,12 +7335,9 @@ value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); } - /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -8316,7 +7351,6 @@ INSTRUCTION_STATS(INTERPRETER_EXIT); _PyStackRef retval; retval = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner == FRAME_OWNED_BY_INTERPRETER); assert(_PyFrame_IsIncomplete(frame)); tstate->current_frame = frame->previous; @@ -8326,12 +7360,10 @@ return result; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(IS_OP) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = IS_OP; (void)(opcode); @@ -8343,39 +7375,28 @@ _PyStackRef right; _PyStackRef b; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ int res = Py_Is(PyStackRef_AsPyObjectBorrow(left), PyStackRef_AsPyObjectBorrow(right)) ^ oparg; _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = right; right = PyStackRef_NULL; - /* Variables=['left'ML, 'right'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = right; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - /* Variables=['left'L, 'right'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = left; - /* Variables=['left'ML, 'right'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ b = res ? PyStackRef_True : PyStackRef_False; - /* Variables=['b'L]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer[0] = b; - /* Variables=['b'ML]; base=-2; sp=-2; logical_sp=-1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(JUMP_BACKWARD) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_BACKWARD; (void)(opcode); @@ -8389,7 +7410,6 @@ /* Skip 1 cache entry */ // _SPECIALIZE_JUMP_BACKWARD { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ #if ENABLE_SPECIALIZATION if (this_instr->op.code == JUMP_BACKWARD) { this_instr->op.code = tstate->interp->jit ? JUMP_BACKWARD_JIT : JUMP_BACKWARD_NO_JIT; @@ -8400,7 +7420,6 @@ } // _CHECK_PERIODIC { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { @@ -8414,7 +7433,6 @@ } // _JUMP_BACKWARD_NO_INTERRUPT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); } @@ -8422,7 +7440,6 @@ } TARGET(JUMP_BACKWARD_JIT) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_BACKWARD_JIT; (void)(opcode); @@ -8436,7 +7453,6 @@ /* Skip 1 cache entry */ // _CHECK_PERIODIC { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { @@ -8450,13 +7466,11 @@ } // _JUMP_BACKWARD_NO_INTERRUPT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); } // _JIT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ #ifdef _Py_TIER2 _Py_BackoffCounter counter = this_instr[1].counter; if (backoff_counter_triggers(counter) && this_instr->op.code == JUMP_BACKWARD_JIT) { @@ -8493,7 +7507,6 @@ } TARGET(JUMP_BACKWARD_NO_INTERRUPT) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_BACKWARD_NO_INTERRUPT; (void)(opcode); @@ -8507,7 +7520,6 @@ } TARGET(JUMP_BACKWARD_NO_JIT) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_BACKWARD_NO_JIT; (void)(opcode); @@ -8519,7 +7531,6 @@ /* Skip 1 cache entry */ // _CHECK_PERIODIC { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { @@ -8533,7 +7544,6 @@ } // _JUMP_BACKWARD_NO_INTERRUPT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ assert(oparg <= INSTR_OFFSET()); JUMPBY(-oparg); } @@ -8541,7 +7551,6 @@ } TARGET(JUMP_FORWARD) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = JUMP_FORWARD; (void)(opcode); @@ -8554,7 +7563,6 @@ } TARGET(LIST_APPEND) { - assert(STACK_LEVEL() - 2 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = LIST_APPEND; (void)(opcode); @@ -8565,9 +7573,7 @@ _PyStackRef list; _PyStackRef v; v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list = stack_pointer[-2 - (oparg-1)]; - /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list), PyStackRef_AsPyObjectSteal(v)); if (err < 0) { @@ -8575,12 +7581,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(LIST_EXTEND) { - assert(STACK_LEVEL() - 2 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = LIST_EXTEND; (void)(opcode); @@ -8591,9 +7595,7 @@ _PyStackRef list_st; _PyStackRef iterable_st; iterable_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ list_st = stack_pointer[-2 - (oparg-1)]; - /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); PyObject *iterable = PyStackRef_AsPyObjectBorrow(iterable_st); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -8615,7 +7617,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8624,7 +7625,6 @@ assert(Py_IsNone(none_val)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8632,7 +7632,6 @@ } TARGET(LOAD_ATTR) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR; (void)(opcode); @@ -8648,9 +7647,7 @@ _PyStackRef *self_or_null; // _SPECIALIZE_LOAD_ATTR { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -8669,7 +7666,6 @@ /* Skip 8 cache entries */ // _LOAD_ATTR { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ self_or_null = &stack_pointer[0]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1); PyObject *attr_o; @@ -8685,7 +7681,6 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8702,7 +7697,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8713,17 +7707,13 @@ } attr = PyStackRef_FromPyObjectSteal(attr_o); } - /* Variables=['attr'L, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer += (oparg&1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=(oparg&1); logical_sp=(oparg&1) */ DISPATCH(); } TARGET(LOAD_ATTR_CLASS) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_CLASS; (void)(opcode); @@ -8740,9 +7730,7 @@ /* Skip 1 cache entry */ // _CHECK_ATTR_CLASS { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { @@ -8760,7 +7748,6 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_CLASS { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); @@ -8768,15 +7755,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; - /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; @@ -8784,12 +7768,10 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } TARGET(LOAD_ATTR_CLASS_WITH_METACLASS_CHECK) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_CLASS_WITH_METACLASS_CHECK; (void)(opcode); @@ -8806,9 +7788,7 @@ /* Skip 1 cache entry */ // _CHECK_ATTR_CLASS { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { @@ -8825,7 +7805,6 @@ } // _GUARD_TYPE_VERSION { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint32_t type_version = read_u32(&this_instr[4].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -8837,7 +7816,6 @@ } // _LOAD_ATTR_CLASS { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); @@ -8845,15 +7823,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; - /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; @@ -8861,12 +7836,10 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } TARGET(LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN; (void)(opcode); @@ -8880,7 +7853,6 @@ _PyStackRef owner; /* Skip 1 cache entry */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); uint32_t func_version = read_u32(&this_instr[4].cache); PyObject *getattribute = read_obj(&this_instr[6].cache); @@ -8920,14 +7892,12 @@ new_frame->localsplus[0] = owner; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ new_frame->localsplus[1] = PyStackRef_FromPyObjectNew(name); frame->return_offset = 10 ; DISPATCH_INLINED(new_frame); } TARGET(LOAD_ATTR_INSTANCE_VALUE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_INSTANCE_VALUE; (void)(opcode); @@ -8944,9 +7914,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -8958,7 +7926,6 @@ } // _CHECK_MANAGED_OBJECT_HAS_VALUES { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); @@ -8970,7 +7937,6 @@ } // _LOAD_ATTR_INSTANCE_VALUE { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint16_t offset = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset); @@ -8993,9 +7959,7 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9003,7 +7967,6 @@ /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; @@ -9011,12 +7974,10 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } TARGET(LOAD_ATTR_METHOD_LAZY_DICT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_METHOD_LAZY_DICT; (void)(opcode); @@ -9033,9 +7994,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -9047,7 +8006,6 @@ } // _CHECK_ATTR_METHOD_LAZY_DICT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint16_t dictoffset = read_u16(&this_instr[4].cache); char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); @@ -9060,7 +8018,6 @@ /* Skip 1 cache entry */ // _LOAD_ATTR_METHOD_LAZY_DICT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -9069,20 +8026,14 @@ attr = PyStackRef_FromPyObjectNew(descr); self = owner; } - /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_ATTR_METHOD_NO_DICT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_METHOD_NO_DICT; (void)(opcode); @@ -9099,9 +8050,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -9114,7 +8063,6 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_METHOD_NO_DICT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert(oparg & 1); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); @@ -9124,20 +8072,14 @@ attr = PyStackRef_FromPyObjectNew(descr); self = owner; } - /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_ATTR_METHOD_WITH_VALUES) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_METHOD_WITH_VALUES; (void)(opcode); @@ -9154,9 +8096,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -9168,7 +8108,6 @@ } // _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); @@ -9180,7 +8119,6 @@ } // _GUARD_KEYS_VERSION { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint32_t keys_version = read_u32(&this_instr[4].cache); PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; @@ -9193,7 +8131,6 @@ } // _LOAD_ATTR_METHOD_WITH_VALUES { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert(oparg & 1); STAT_INC(LOAD_ATTR, hit); @@ -9202,20 +8139,14 @@ attr = PyStackRef_FromPyObjectNew(descr); self = owner; } - /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_ATTR_MODULE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_MODULE; (void)(opcode); @@ -9232,9 +8163,7 @@ /* Skip 1 cache entry */ // _LOAD_ATTR_MODULE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t dict_version = read_u32(&this_instr[2].cache); uint16_t index = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -9273,9 +8202,7 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9283,7 +8210,6 @@ /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; @@ -9291,12 +8217,10 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } TARGET(LOAD_ATTR_NONDESCRIPTOR_NO_DICT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_NONDESCRIPTOR_NO_DICT; (void)(opcode); @@ -9312,9 +8236,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -9327,7 +8249,6 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_NONDESCRIPTOR_NO_DICT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert((oparg & 1) == 0); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); @@ -9335,23 +8256,18 @@ assert(descr != NULL); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); } - /* Variables=['attr'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES; (void)(opcode); @@ -9367,9 +8283,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -9381,7 +8295,6 @@ } // _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); @@ -9393,7 +8306,6 @@ } // _GUARD_KEYS_VERSION { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint32_t keys_version = read_u32(&this_instr[4].cache); PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; @@ -9406,30 +8318,24 @@ } // _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *descr = read_obj(&this_instr[6].cache); assert((oparg & 1) == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); } - /* Variables=['attr'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = attr; - /* Variables=['attr'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(LOAD_ATTR_PROPERTY) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_PROPERTY; (void)(opcode); @@ -9445,7 +8351,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(LOAD_ATTR); assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR)); @@ -9454,9 +8359,7 @@ } // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -9469,7 +8372,6 @@ /* Skip 2 cache entries */ // _LOAD_ATTR_PROPERTY_FRAME { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *fget = read_obj(&this_instr[6].cache); assert((oparg & 1) == 0); assert(Py_IS_TYPE(fget, &PyFunction_Type)); @@ -9501,7 +8403,6 @@ } // _SAVE_RETURN_OFFSET { - /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); #endif @@ -9511,12 +8412,10 @@ } // _PUSH_FRAME { - /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -9530,7 +8429,6 @@ } TARGET(LOAD_ATTR_SLOT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_SLOT; (void)(opcode); @@ -9547,9 +8445,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -9561,7 +8457,6 @@ } // _LOAD_ATTR_SLOT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint16_t index = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **addr = (PyObject **)((char *)owner_o + index); @@ -9585,16 +8480,13 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; - /* Variables=['owner'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; @@ -9602,12 +8494,10 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } TARGET(LOAD_ATTR_WITH_HINT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_ATTR_WITH_HINT; (void)(opcode); @@ -9624,9 +8514,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -9638,7 +8526,6 @@ } // _LOAD_ATTR_WITH_HINT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ uint16_t hint = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); @@ -9702,9 +8589,7 @@ #else attr = PyStackRef_FromPyObjectNew(attr_o); #endif - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -9712,7 +8597,6 @@ /* Skip 5 cache entries */ // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ null = &stack_pointer[0]; if (oparg & 1) { null[0] = PyStackRef_NULL; @@ -9720,12 +8604,10 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-1; sp=(oparg & 1); logical_sp=(oparg & 1) */ DISPATCH(); } TARGET(LOAD_BUILD_CLASS) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_BUILD_CLASS; (void)(opcode); @@ -9749,17 +8631,13 @@ JUMP_TO_LABEL(error); } bc = PyStackRef_FromPyObjectSteal(bc_o); - /* Variables=['bc'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = bc; - /* Variables=['bc'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['bc'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_COMMON_CONSTANT) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_COMMON_CONSTANT; (void)(opcode); @@ -9770,17 +8648,13 @@ _PyStackRef value; assert(oparg < NUM_COMMON_CONSTANTS); value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_CONST) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_CONST; (void)(opcode); @@ -9808,17 +8682,13 @@ } #endif #endif - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_CONST_IMMORTAL) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_CONST_IMMORTAL; (void)(opcode); @@ -9831,17 +8701,13 @@ PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); assert(_Py_IsImmortal(obj)); value = PyStackRef_FromPyObjectImmortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_CONST_MORTAL) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_CONST_MORTAL; (void)(opcode); @@ -9853,17 +8719,13 @@ _PyStackRef value; PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); value = PyStackRef_FromPyObjectNewMortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_DEREF) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_DEREF; (void)(opcode); @@ -9877,28 +8739,21 @@ value = _PyCell_GetStackRef(cell); stack_pointer = _PyFrame_GetStackPointer(frame); if (PyStackRef_IsNull(value)) { - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_LABEL(error); } - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_FAST) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST; (void)(opcode); @@ -9909,17 +8764,13 @@ _PyStackRef value; assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_FAST_AND_CLEAR) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_AND_CLEAR; (void)(opcode); @@ -9930,17 +8781,13 @@ _PyStackRef value; value = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_NULL; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_FAST_BORROW) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_BORROW; (void)(opcode); @@ -9951,17 +8798,13 @@ _PyStackRef value; assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_FAST_BORROW_LOAD_FAST_BORROW) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_BORROW_LOAD_FAST_BORROW; (void)(opcode); @@ -9975,20 +8818,14 @@ uint32_t oparg2 = oparg & 15; value1 = PyStackRef_Borrow(GETLOCAL(oparg1)); value2 = PyStackRef_Borrow(GETLOCAL(oparg2)); - /* Variables=['value1'L, 'value2'L]; base=0; sp=0; logical_sp=2 */ stack_pointer[0] = value1; - /* Variables=['value1'ML, 'value2'L]; base=0; sp=0; logical_sp=2 */ - /* Variables=['value1'ML, 'value2'L]; base=0; sp=0; logical_sp=2 */ stack_pointer[1] = value2; - /* Variables=['value1'ML, 'value2'ML]; base=0; sp=0; logical_sp=2 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value1'ML, 'value2'ML]; base=0; sp=2; logical_sp=2 */ DISPATCH(); } TARGET(LOAD_FAST_CHECK) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_CHECK; (void)(opcode); @@ -10008,17 +8845,13 @@ JUMP_TO_LABEL(error); } value = PyStackRef_DUP(value_s); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_FAST_LOAD_FAST) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FAST_LOAD_FAST; (void)(opcode); @@ -10032,20 +8865,14 @@ uint32_t oparg2 = oparg & 15; value1 = PyStackRef_DUP(GETLOCAL(oparg1)); value2 = PyStackRef_DUP(GETLOCAL(oparg2)); - /* Variables=['value1'L, 'value2'L]; base=0; sp=0; logical_sp=2 */ stack_pointer[0] = value1; - /* Variables=['value1'ML, 'value2'L]; base=0; sp=0; logical_sp=2 */ - /* Variables=['value1'ML, 'value2'L]; base=0; sp=0; logical_sp=2 */ stack_pointer[1] = value2; - /* Variables=['value1'ML, 'value2'ML]; base=0; sp=0; logical_sp=2 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value1'ML, 'value2'ML]; base=0; sp=2; logical_sp=2 */ DISPATCH(); } TARGET(LOAD_FROM_DICT_OR_DEREF) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FROM_DICT_OR_DEREF; (void)(opcode); @@ -10056,7 +8883,6 @@ _PyStackRef class_dict_st; _PyStackRef value; class_dict_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o; PyObject *name; PyObject *class_dict = PyStackRef_AsPyObjectBorrow(class_dict_st); @@ -10081,22 +8907,17 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(class_dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectSteal(value_o); - /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(LOAD_FROM_DICT_OR_GLOBALS) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_FROM_DICT_OR_GLOBALS; (void)(opcode); @@ -10107,7 +8928,6 @@ _PyStackRef mod_or_class_dict; _PyStackRef v; mod_or_class_dict = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *v_o; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -10115,7 +8935,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(mod_or_class_dict); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10167,17 +8986,13 @@ } } v = PyStackRef_FromPyObjectSteal(v_o); - /* Variables=['v'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = v; - /* Variables=['v'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(LOAD_GLOBAL) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_GLOBAL; (void)(opcode); @@ -10192,7 +9007,6 @@ _PyStackRef *null; // _SPECIALIZE_LOAD_GLOBAL { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -10213,7 +9027,6 @@ /* Skip 1 cache entry */ // _LOAD_GLOBAL { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ res = &stack_pointer[0]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -10225,7 +9038,6 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['res'A]; base=0; sp=0; logical_sp=1 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; @@ -10233,12 +9045,10 @@ } stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'A, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ DISPATCH(); } TARGET(LOAD_GLOBAL_BUILTIN) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_GLOBAL_BUILTIN; (void)(opcode); @@ -10254,7 +9064,6 @@ /* Skip 1 cache entry */ // _GUARD_GLOBALS_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ uint16_t version = read_u16(&this_instr[2].cache); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { @@ -10272,7 +9081,6 @@ } // _LOAD_GLOBAL_BUILTINS { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ uint16_t version = read_u16(&this_instr[3].cache); uint16_t index = read_u16(&this_instr[4].cache); PyDictObject *dict = (PyDictObject *)BUILTINS(); @@ -10309,23 +9117,18 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - /* Variables=['res'L, 'null'A]; base=0; sp=0; logical_sp=1 + (oparg & 1) */ stack_pointer[0] = res; - /* Variables=['res'ML, 'null'A]; base=0; sp=0; logical_sp=1 + (oparg & 1) */ stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ DISPATCH(); } TARGET(LOAD_GLOBAL_MODULE) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_GLOBAL_MODULE; (void)(opcode); @@ -10341,11 +9144,9 @@ /* Skip 1 cache entry */ // _NOP { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ } // _LOAD_GLOBAL_MODULE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ uint16_t version = read_u16(&this_instr[2].cache); uint16_t index = read_u16(&this_instr[4].cache); PyDictObject *dict = (PyDictObject *)GLOBALS(); @@ -10383,23 +9184,18 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - /* Variables=['res'L, 'null'A]; base=0; sp=0; logical_sp=1 + (oparg & 1) */ stack_pointer[0] = res; - /* Variables=['res'ML, 'null'A]; base=0; sp=0; logical_sp=1 + (oparg & 1) */ stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML, 'null'A]; base=0; sp=1 + (oparg & 1); logical_sp=1 + (oparg & 1) */ DISPATCH(); } TARGET(LOAD_LOCALS) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_LOCALS; (void)(opcode); @@ -10417,17 +9213,13 @@ JUMP_TO_LABEL(error); } locals = PyStackRef_FromPyObjectNew(l); - /* Variables=['locals'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = locals; - /* Variables=['locals'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['locals'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_NAME) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_NAME; (void)(opcode); @@ -10444,17 +9236,13 @@ JUMP_TO_LABEL(error); } v = PyStackRef_FromPyObjectSteal(v_o); - /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = v; - /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_SMALL_INT) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SMALL_INT; (void)(opcode); @@ -10466,17 +9254,13 @@ assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectImmortal(obj); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_SPECIAL) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SPECIAL; (void)(opcode); @@ -10488,14 +9272,12 @@ _PyStackRef attr; _PyStackRef self_or_null; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg <= SPECIAL_MAX); PyObject *owner_o = PyStackRef_AsPyObjectSteal(owner); PyObject *name = _Py_SpecialMethods[oparg].name; PyObject *self_or_null_o; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PyObject_LookupSpecialMethod(owner_o, name, &self_or_null_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10512,20 +9294,14 @@ attr = PyStackRef_FromPyObjectSteal(attr_o); self_or_null = self_or_null_o == NULL ? PyStackRef_NULL : PyStackRef_FromPyObjectSteal(self_or_null_o); - /* Variables=['attr'L, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ stack_pointer[0] = attr; - /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ - /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=-1; logical_sp=1 */ stack_pointer[1] = self_or_null; - /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=-1; logical_sp=1 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(LOAD_SUPER_ATTR) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SUPER_ATTR; (void)(opcode); @@ -10544,11 +9320,8 @@ _PyStackRef *null; // _SPECIALIZE_LOAD_SUPER_ATTR { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ class_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ global_super_st = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -10566,7 +9339,6 @@ } // _LOAD_SUPER_ATTR { - /* Variables=['global_super_st'ML, 'class_st'ML, 'unused'M]; base=-3; sp=0; logical_sp=0 */ self_st = stack_pointer[-1]; PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); @@ -10582,26 +9354,19 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ JUMP_TO_LABEL(error); } } @@ -10634,26 +9399,19 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (super == NULL) { JUMP_TO_LABEL(error); } @@ -10669,23 +9427,18 @@ } // _PUSH_NULL_CONDITIONAL { - /* Variables=['attr'L]; base=-3; sp=-3; logical_sp=-2 */ null = &stack_pointer[1]; if (oparg & 1) { null[0] = PyStackRef_NULL; } } - /* Variables=['attr'L, 'null'A]; base=-3; sp=-3; logical_sp=-2 + (oparg & 1) */ stack_pointer[0] = attr; - /* Variables=['attr'ML, 'null'A]; base=-3; sp=-3; logical_sp=-2 + (oparg & 1) */ stack_pointer += 1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'null'A]; base=-3; sp=-2 + (oparg & 1); logical_sp=-2 + (oparg & 1) */ DISPATCH(); } TARGET(LOAD_SUPER_ATTR_ATTR) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SUPER_ATTR_ATTR; (void)(opcode); @@ -10702,11 +9455,8 @@ _PyStackRef attr_st; /* Skip 1 cache entry */ self_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ class_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ global_super_st = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); @@ -10727,41 +9477,30 @@ PyObject *attr = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); _PyStackRef tmp = self_st; self_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = self_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = global_super_st; global_super_st = PyStackRef_NULL; - /* Variables=['global_super_st'L, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML, 'self_st'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (attr == NULL) { JUMP_TO_LABEL(error); } attr_st = PyStackRef_FromPyObjectSteal(attr); - /* Variables=['attr_st'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = attr_st; - /* Variables=['attr_st'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr_st'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } TARGET(LOAD_SUPER_ATTR_METHOD) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = LOAD_SUPER_ATTR_METHOD; (void)(opcode); @@ -10779,11 +9518,8 @@ _PyStackRef self_or_null; /* Skip 1 cache entry */ self_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ class_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ global_super_st = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); @@ -10814,7 +9550,6 @@ } else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10823,39 +9558,27 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = global_super_st; global_super_st = self_or_null; - /* Variables=['global_super_st'L, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ stack_pointer[-2] = global_super_st; - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); tmp = class_st; class_st = PyStackRef_NULL; - /* Variables=['global_super_st'ML, 'class_st'L]; base=-3; sp=-1; logical_sp=-1 */ stack_pointer[-1] = class_st; - /* Variables=['global_super_st'ML, 'class_st'ML]; base=-3; sp=-1; logical_sp=-1 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ attr = PyStackRef_FromPyObjectSteal(attr_o); - /* Variables=['attr'L, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[0] = attr; - /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ - /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer[1] = self_or_null; - /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-3; logical_sp=-1 */ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(MAKE_CELL) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MAKE_CELL; (void)(opcode); @@ -10877,7 +9600,6 @@ } TARGET(MAKE_FUNCTION) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MAKE_FUNCTION; (void)(opcode); @@ -10888,7 +9610,6 @@ _PyStackRef codeobj_st; _PyStackRef func; codeobj_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *codeobj = PyStackRef_AsPyObjectBorrow(codeobj_st); _PyFrame_SetStackPointer(frame, stack_pointer); PyFunctionObject *func_obj = (PyFunctionObject *) @@ -10896,7 +9617,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(codeobj_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10906,17 +9626,13 @@ _PyFunction_SetVersion( func_obj, ((PyCodeObject *)codeobj)->co_version); func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj); - /* Variables=['func'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = func; - /* Variables=['func'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(MAP_ADD) { - assert(STACK_LEVEL() - 3 + (oparg - 1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = MAP_ADD; (void)(opcode); @@ -10928,11 +9644,8 @@ _PyStackRef key; _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ key = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ dict_st = stack_pointer[-3 - (oparg - 1)]; - /* Variables=[]; base=-3 - (oparg - 1); sp=0; logical_sp=-3 - (oparg - 1) */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -10947,12 +9660,10 @@ } stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict_st'ML, 'unused'MA]; base=-3 - (oparg - 1); sp=-2; logical_sp=-2 */ DISPATCH(); } TARGET(MATCH_CLASS) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MATCH_CLASS; (void)(opcode); @@ -10965,11 +9676,8 @@ _PyStackRef names; _PyStackRef attrs; names = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ type = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ subject = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ assert(PyTuple_CheckExact(PyStackRef_AsPyObjectBorrow(names))); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attrs_o = _PyEval_MatchClass(tstate, @@ -10978,26 +9686,19 @@ PyStackRef_AsPyObjectBorrow(names)); _PyStackRef tmp = names; names = PyStackRef_NULL; - /* Variables=['subject'ML, 'type'ML, 'names'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = names; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = type; type = PyStackRef_NULL; - /* Variables=['subject'ML, 'type'L, 'names'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = type; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = subject; subject = PyStackRef_NULL; - /* Variables=['subject'L, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = subject; - /* Variables=['subject'ML, 'type'ML, 'names'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (attrs_o) { assert(PyTuple_CheckExact(attrs_o)); attrs = PyStackRef_FromPyObjectSteal(attrs_o); @@ -11008,17 +9709,13 @@ } attrs = PyStackRef_None; } - /* Variables=['attrs'L]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer[0] = attrs; - /* Variables=['attrs'ML]; base=-3; sp=-3; logical_sp=-2 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attrs'ML]; base=-3; sp=-2; logical_sp=-2 */ DISPATCH(); } TARGET(MATCH_KEYS) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MATCH_KEYS; (void)(opcode); @@ -11030,9 +9727,7 @@ _PyStackRef keys; _PyStackRef values_or_none; keys = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ subject = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *values_or_none_o = _PyEval_MatchKeys(tstate, PyStackRef_AsPyObjectBorrow(subject), PyStackRef_AsPyObjectBorrow(keys)); @@ -11041,17 +9736,13 @@ JUMP_TO_LABEL(error); } values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o); - /* Variables=['subject'ML, 'keys'ML, 'values_or_none'L]; base=-2; sp=0; logical_sp=1 */ stack_pointer[0] = values_or_none; - /* Variables=['subject'ML, 'keys'ML, 'values_or_none'ML]; base=-2; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML, 'keys'ML, 'values_or_none'ML]; base=-2; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(MATCH_MAPPING) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MATCH_MAPPING; (void)(opcode); @@ -11062,20 +9753,15 @@ _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? PyStackRef_True : PyStackRef_False; - /* Variables=['subject'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['subject'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(MATCH_SEQUENCE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = MATCH_SEQUENCE; (void)(opcode); @@ -11086,20 +9772,15 @@ _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? PyStackRef_True : PyStackRef_False; - /* Variables=['subject'ML, 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['subject'ML, 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject'ML, 'res'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(NOP) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = NOP; (void)(opcode); @@ -11111,7 +9792,6 @@ } TARGET(NOT_TAKEN) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = NOT_TAKEN; (void)(opcode); @@ -11123,7 +9803,6 @@ } TARGET(POP_EXCEPT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_EXCEPT; (void)(opcode); @@ -11133,7 +9812,6 @@ INSTRUCTION_STATS(POP_EXCEPT); _PyStackRef exc_value; exc_value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyErr_StackItem *exc_info = tstate->exc_info; _PyFrame_SetStackPointer(frame, stack_pointer); Py_XSETREF(exc_info->exc_value, @@ -11142,12 +9820,10 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(POP_ITER) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_ITER; (void)(opcode); @@ -11157,10 +9833,8 @@ INSTRUCTION_STATS(POP_ITER); _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11168,7 +9842,6 @@ } TARGET(POP_JUMP_IF_FALSE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_JUMP_IF_FALSE; (void)(opcode); @@ -11181,19 +9854,16 @@ _PyStackRef cond; /* Skip 1 cache entry */ cond = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsFalse(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(POP_JUMP_IF_NONE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_JUMP_IF_NONE; (void)(opcode); @@ -11209,9 +9879,7 @@ /* Skip 1 cache entry */ // _IS_NONE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (PyStackRef_IsNone(value)) { b = PyStackRef_True; } @@ -11220,16 +9888,13 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = b; - /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } } // _POP_JUMP_IF_TRUE { - /* Variables=['b'L]; base=-1; sp=0; logical_sp=0 */ cond = b; assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsTrue(cond); @@ -11238,12 +9903,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(POP_JUMP_IF_NOT_NONE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_JUMP_IF_NOT_NONE; (void)(opcode); @@ -11259,9 +9922,7 @@ /* Skip 1 cache entry */ // _IS_NONE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (PyStackRef_IsNone(value)) { b = PyStackRef_True; } @@ -11270,16 +9931,13 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = b; - /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); } } // _POP_JUMP_IF_FALSE { - /* Variables=['b'L]; base=-1; sp=0; logical_sp=0 */ cond = b; assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsFalse(cond); @@ -11288,12 +9946,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(POP_JUMP_IF_TRUE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_JUMP_IF_TRUE; (void)(opcode); @@ -11306,19 +9962,16 @@ _PyStackRef cond; /* Skip 1 cache entry */ cond = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(cond)); int flag = PyStackRef_IsTrue(cond); RECORD_BRANCH_TAKEN(this_instr[1].cache, flag); JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(POP_TOP) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = POP_TOP; (void)(opcode); @@ -11328,10 +9981,8 @@ INSTRUCTION_STATS(POP_TOP); _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11339,7 +9990,6 @@ } TARGET(PUSH_EXC_INFO) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = PUSH_EXC_INFO; (void)(opcode); @@ -11351,7 +10001,6 @@ _PyStackRef prev_exc; _PyStackRef new_exc; exc = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyErr_StackItem *exc_info = tstate->exc_info; if (exc_info->exc_value != NULL) { prev_exc = PyStackRef_FromPyObjectSteal(exc_info->exc_value); @@ -11362,20 +10011,14 @@ assert(PyStackRef_ExceptionInstanceCheck(exc)); exc_info->exc_value = PyStackRef_AsPyObjectNew(exc); new_exc = exc; - /* Variables=['prev_exc'L, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = prev_exc; - /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = new_exc; - /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(PUSH_NULL) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = PUSH_NULL; (void)(opcode); @@ -11385,17 +10028,13 @@ INSTRUCTION_STATS(PUSH_NULL); _PyStackRef res; res = PyStackRef_NULL; - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(RAISE_VARARGS) { - assert(STACK_LEVEL() - oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = RAISE_VARARGS; (void)(opcode); @@ -11407,13 +10046,11 @@ INSTRUCTION_STATS(RAISE_VARARGS); _PyStackRef *args; args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ assert(oparg < 3); PyObject *cause = oparg == 2 ? PyStackRef_AsPyObjectSteal(args[1]) : NULL; PyObject *exc = oparg > 0 ? PyStackRef_AsPyObjectSteal(args[0]) : NULL; stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-oparg; sp=-oparg; logical_sp=-oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = do_raise(tstate, exc, cause); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11427,7 +10064,6 @@ } TARGET(RERAISE) { - assert(STACK_LEVEL() - 1 + oparg >= -1); #if Py_TAIL_CALL_INTERP int opcode = RERAISE; (void)(opcode); @@ -11440,9 +10076,7 @@ _PyStackRef *values; _PyStackRef exc_st; exc_st = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ values = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ PyObject *exc = PyStackRef_AsPyObjectSteal(exc_st); assert(oparg >= 0 && oparg <= 2); if (oparg) { @@ -11454,7 +10088,6 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'MLA]; base=-1 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetString(tstate, PyExc_SystemError, "lasti is not an int"); Py_DECREF(exc); @@ -11465,7 +10098,6 @@ assert(exc && PyExceptionInstance_Check(exc)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'MLA]; base=-1 - oparg; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetRaisedException(tstate, exc); monitor_reraise(tstate, frame, this_instr); @@ -11473,7 +10105,6 @@ } TARGET(RESERVED) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RESERVED; (void)(opcode); @@ -11487,7 +10118,6 @@ } TARGET(RESUME) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RESUME; (void)(opcode); @@ -11500,7 +10130,6 @@ (void)this_instr; // _LOAD_BYTECODE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { @@ -11521,7 +10150,6 @@ } // _MAYBE_INSTRUMENT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->tracing == 0) { uintptr_t global_version = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & ~_PY_EVAL_EVENTS_MASK; uintptr_t code_version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); @@ -11539,7 +10167,6 @@ } // _QUICKEN_RESUME { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ #if ENABLE_SPECIALIZATION_FT if (tstate->tracing == 0 && this_instr->op.code == RESUME) { FT_ATOMIC_STORE_UINT8_RELAXED(this_instr->op.code, RESUME_CHECK); @@ -11548,7 +10175,6 @@ } // _CHECK_PERIODIC_IF_NOT_YIELD_FROM { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); @@ -11566,7 +10192,6 @@ } TARGET(RESUME_CHECK) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RESUME_CHECK; (void)(opcode); @@ -11605,7 +10230,6 @@ } TARGET(RETURN_GENERATOR) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RETURN_GENERATOR; (void)(opcode); @@ -11622,7 +10246,7 @@ if (gen == NULL) { JUMP_TO_LABEL(error); } - assert(EMPTY()); + assert(STACK_LEVEL() == 0); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *gen_frame = &gen->gi_iframe; frame->instr_ptr++; @@ -11638,17 +10262,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen); LLTRACE_RESUME_FRAME(); - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(RETURN_VALUE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = RETURN_VALUE; (void)(opcode); @@ -11659,14 +10279,12 @@ _PyStackRef retval; _PyStackRef res; retval = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); - assert(EMPTY()); + assert(STACK_LEVEL() == 0); _Py_LeaveRecursiveCallPy(tstate); _PyInterpreterFrame *dying = frame; frame = tstate->current_frame = dying->previous; @@ -11675,17 +10293,13 @@ LOAD_IP(frame->return_offset); res = temp; LLTRACE_RESUME_FRAME(); - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(SEND) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = SEND; (void)(opcode); @@ -11701,9 +10315,7 @@ _PyStackRef retval; // _SPECIALIZE_SEND { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ receiver = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -11720,7 +10332,6 @@ } // _SEND { - /* Variables=['receiver'ML, 'unused'M]; base=-2; sp=0; logical_sp=0 */ v = stack_pointer[-1]; PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver); PyObject *retval_o; @@ -11734,7 +10345,6 @@ _PyFrame_StackPush(gen_frame, PyStackRef_MakeHeapSafe(v)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ gen->gi_frame_state = FRAME_EXECUTING; gen->gi_exc_state.previous_item = tstate->exc_info; tstate->exc_info = &gen->gi_exc_state; @@ -11775,7 +10385,6 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11784,23 +10393,18 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); retval = PyStackRef_FromPyObjectSteal(retval_o); } - /* Variables=['receiver'ML, 'retval'L]; base=-2; sp=-1; logical_sp=0 */ stack_pointer[0] = retval; - /* Variables=['receiver'ML, 'retval'ML]; base=-2; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML, 'retval'ML]; base=-2; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(SEND_GEN) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = SEND_GEN; (void)(opcode); @@ -11818,7 +10422,6 @@ /* Skip 1 cache entry */ // _CHECK_PEP_523 { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ if (tstate->interp->eval_frame) { UPDATE_MISS_STATS(SEND); assert(_PyOpcode_Deopt[opcode] == (SEND)); @@ -11827,11 +10430,8 @@ } // _SEND_GEN_FRAME { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ receiver = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { UPDATE_MISS_STATS(SEND); @@ -11855,13 +10455,11 @@ } // _PUSH_FRAME { - /* Variables=['receiver'ML, 'gen_frame'L]; base=-2; sp=0; logical_sp=0 */ new_frame = gen_frame; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = new_frame; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['receiver'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); assert(new_frame->previous == frame || new_frame->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -11875,7 +10473,6 @@ } TARGET(SETUP_ANNOTATIONS) { - assert(STACK_LEVEL() - 0 >= -1); #if Py_TAIL_CALL_INTERP int opcode = SETUP_ANNOTATIONS; (void)(opcode); @@ -11922,7 +10519,6 @@ } TARGET(SET_ADD) { - assert(STACK_LEVEL() - 2 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = SET_ADD; (void)(opcode); @@ -11933,9 +10529,7 @@ _PyStackRef set; _PyStackRef v; v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ set = stack_pointer[-2 - (oparg-1)]; - /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_AddTakeRef((PySetObject *)PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectSteal(v)); @@ -11945,12 +10539,10 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(SET_FUNCTION_ATTRIBUTE) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = SET_FUNCTION_ATTRIBUTE; (void)(opcode); @@ -11962,9 +10554,7 @@ _PyStackRef func_in; _PyStackRef func_out; func_in = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ attr_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); func_out = func_in; @@ -11974,17 +10564,13 @@ PyObject **ptr = (PyObject **)(((char *)func) + offset); assert(*ptr == NULL); *ptr = attr; - /* Variables=['func_out'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = func_out; - /* Variables=['func_out'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_out'ML]; base=-2; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(SET_UPDATE) { - assert(STACK_LEVEL() - 2 + (oparg-1) >= -1); #if Py_TAIL_CALL_INTERP int opcode = SET_UPDATE; (void)(opcode); @@ -11995,16 +10581,13 @@ _PyStackRef set; _PyStackRef iterable; iterable = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ set = stack_pointer[-2 - (oparg-1)]; - /* Variables=[]; base=-2 - (oparg-1); sp=0; logical_sp=-2 - (oparg-1) */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_Update(PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML, 'unused'MA]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12015,7 +10598,6 @@ } TARGET(STORE_ATTR) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_ATTR; (void)(opcode); @@ -12030,9 +10612,7 @@ _PyStackRef v; // _SPECIALIZE_STORE_ATTR { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -12051,29 +10631,22 @@ /* Skip 3 cache entries */ // _STORE_ATTR { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ v = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetAttr(PyStackRef_AsPyObjectBorrow(owner), name, PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = owner; owner = PyStackRef_NULL; - /* Variables=['v'ML, 'owner'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = owner; - /* Variables=['v'ML, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - /* Variables=['v'L, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = v; - /* Variables=['v'ML, 'owner'ML]; base=-2; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ if (err) { JUMP_TO_LABEL(error); } @@ -12082,7 +10655,6 @@ } TARGET(STORE_ATTR_INSTANCE_VALUE) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_ATTR_INSTANCE_VALUE; (void)(opcode); @@ -12098,9 +10670,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION_AND_LOCK { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); @@ -12121,7 +10691,6 @@ } // _GUARD_DORV_NO_DICT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); @@ -12137,9 +10706,7 @@ } // _STORE_ATTR_INSTANCE_VALUE { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ value = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t offset = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); STAT_INC(STORE_ATTR, hit); @@ -12155,7 +10722,6 @@ UNLOCK_OBJECT(owner_o); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -12165,7 +10731,6 @@ } TARGET(STORE_ATTR_SLOT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_ATTR_SLOT; (void)(opcode); @@ -12181,9 +10746,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -12195,9 +10758,7 @@ } // _STORE_ATTR_SLOT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ value = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t index = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!LOCK_OBJECT(owner_o)) { @@ -12212,7 +10773,6 @@ UNLOCK_OBJECT(owner_o); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -12222,7 +10782,6 @@ } TARGET(STORE_ATTR_WITH_HINT) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_ATTR_WITH_HINT; (void)(opcode); @@ -12238,9 +10797,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -12252,9 +10809,7 @@ } // _STORE_ATTR_WITH_HINT { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ value = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t hint = read_u16(&this_instr[4].cache); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); @@ -12316,7 +10871,6 @@ STAT_INC(STORE_ATTR, hit); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -12326,7 +10880,6 @@ } TARGET(STORE_DEREF) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_DEREF; (void)(opcode); @@ -12336,19 +10889,16 @@ INSTRUCTION_STATS(STORE_DEREF); _PyStackRef v; v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); _PyFrame_SetStackPointer(frame, stack_pointer); PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ DISPATCH(); } TARGET(STORE_FAST) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_FAST; (void)(opcode); @@ -12358,7 +10908,6 @@ INSTRUCTION_STATS(STORE_FAST); _PyStackRef value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value) @@ -12367,7 +10916,6 @@ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12375,7 +10923,6 @@ } TARGET(STORE_FAST_LOAD_FAST) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_FAST_LOAD_FAST; (void)(opcode); @@ -12386,7 +10933,6 @@ _PyStackRef value1; _PyStackRef value2; value1 = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value1) @@ -12396,9 +10942,7 @@ _PyStackRef tmp = GETLOCAL(oparg1); GETLOCAL(oparg1) = value1; value2 = PyStackRef_DUP(GETLOCAL(oparg2)); - /* Variables=['value2'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value2; - /* Variables=['value2'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12406,7 +10950,6 @@ } TARGET(STORE_FAST_STORE_FAST) { - assert(STACK_LEVEL() - 2 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_FAST_STORE_FAST; (void)(opcode); @@ -12417,9 +10960,7 @@ _PyStackRef value2; _PyStackRef value1; value1 = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ value2 = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ assert( ((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) || PyStackRef_IsHeapSafe(value1) @@ -12434,7 +10975,6 @@ GETLOCAL(oparg1) = value1; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value2'ML]; base=-2; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12442,7 +10982,6 @@ GETLOCAL(oparg2) = value2; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12450,7 +10989,6 @@ } TARGET(STORE_GLOBAL) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_GLOBAL; (void)(opcode); @@ -12460,14 +10998,12 @@ INSTRUCTION_STATS(STORE_GLOBAL); _PyStackRef v; v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_SetItem(GLOBALS(), name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12478,7 +11014,6 @@ } TARGET(STORE_NAME) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_NAME; (void)(opcode); @@ -12488,7 +11023,6 @@ INSTRUCTION_STATS(STORE_NAME); _PyStackRef v; v = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); int err; @@ -12499,7 +11033,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12517,7 +11050,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12528,7 +11060,6 @@ } TARGET(STORE_SLICE) { - assert(STACK_LEVEL() - 4 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_SLICE; (void)(opcode); @@ -12542,14 +11073,12 @@ _PyStackRef stop; // _SPECIALIZE_STORE_SLICE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ #if ENABLE_SPECIALIZATION OPCODE_DEFERRED_INC(STORE_SLICE); #endif /* ENABLE_SPECIALIZATION */ } // _STORE_SLICE { - /* Variables=['v'M, 'container'M, 'start'M, 'stop'M]; base=-4; sp=0; logical_sp=0 */ stop = stack_pointer[-1]; start = stack_pointer[-2]; container = stack_pointer[-3]; @@ -12565,7 +11094,6 @@ else { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML, 'container'ML]; base=-4; sp=-2; logical_sp=-2 */ _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), slice, PyStackRef_AsPyObjectBorrow(v)); Py_DECREF(slice); @@ -12575,20 +11103,15 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = container; container = PyStackRef_NULL; - /* Variables=['v'ML, 'container'L]; base=-4; sp=0; logical_sp=-2 */ stack_pointer[-3] = container; - /* Variables=['v'ML, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - /* Variables=['v'L, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ stack_pointer[-4] = v; - /* Variables=['v'ML, 'container'ML]; base=-4; sp=0; logical_sp=-2 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -4; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ if (err) { JUMP_TO_LABEL(error); } @@ -12597,7 +11120,6 @@ } TARGET(STORE_SUBSCR) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_SUBSCR; (void)(opcode); @@ -12613,11 +11135,8 @@ _PyStackRef v; // _SPECIALIZE_STORE_SUBSCR { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ sub = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ container = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -12634,33 +11153,24 @@ } // _STORE_SUBSCR { - /* Variables=['container'ML, 'sub'ML]; base=-2; sp=0; logical_sp=0 */ v = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub), PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = sub; sub = PyStackRef_NULL; - /* Variables=['v'ML, 'container'ML, 'sub'L]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-1] = sub; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = container; container = PyStackRef_NULL; - /* Variables=['v'ML, 'container'L, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-2] = container; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); tmp = v; v = PyStackRef_NULL; - /* Variables=['v'L, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ stack_pointer[-3] = v; - /* Variables=['v'ML, 'container'ML, 'sub'ML]; base=-3; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ if (err) { JUMP_TO_LABEL(error); } @@ -12669,7 +11179,6 @@ } TARGET(STORE_SUBSCR_DICT) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_SUBSCR_DICT; (void)(opcode); @@ -12685,11 +11194,8 @@ _PyStackRef sub; /* Skip 1 cache entry */ sub = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ dict_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ value = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); if (!PyDict_CheckExact(dict)) { UPDATE_MISS_STATS(STORE_SUBSCR); @@ -12704,7 +11210,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12715,7 +11220,6 @@ } TARGET(STORE_SUBSCR_LIST_INT) { - assert(STACK_LEVEL() - 3 >= -1); #if Py_TAIL_CALL_INTERP int opcode = STORE_SUBSCR_LIST_INT; (void)(opcode); @@ -12731,9 +11235,7 @@ _PyStackRef sub_st; // _GUARD_TOS_INT { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UPDATE_MISS_STATS(STORE_SUBSCR); @@ -12744,12 +11246,9 @@ /* Skip 1 cache entry */ // _STORE_SUBSCR_LIST_INT { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ sub_st = value; list_st = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ value = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); @@ -12786,7 +11285,6 @@ PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(list_st); Py_DECREF(old_value); @@ -12796,7 +11294,6 @@ } TARGET(SWAP) { - assert(STACK_LEVEL() - 2 + (oparg-2) >= -1); #if Py_TAIL_CALL_INTERP int opcode = SWAP; (void)(opcode); @@ -12807,9 +11304,7 @@ _PyStackRef *bottom; _PyStackRef *top; top = &stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ bottom = &stack_pointer[-2 - (oparg-2)]; - /* Variables=[]; base=-2 - (oparg-2); sp=0; logical_sp=-2 - (oparg-2) */ _PyStackRef temp = bottom[0]; bottom[0] = top[0]; top[0] = temp; @@ -12818,7 +11313,6 @@ } TARGET(TO_BOOL) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL; (void)(opcode); @@ -12833,9 +11327,7 @@ _PyStackRef res; // _SPECIALIZE_TO_BOOL { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -12853,13 +11345,11 @@ /* Skip 2 cache entries */ // _TO_BOOL { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_IsTrue(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12868,17 +11358,13 @@ } res = err ? PyStackRef_True : PyStackRef_False; } - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(TO_BOOL_ALWAYS_TRUE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_ALWAYS_TRUE; (void)(opcode); @@ -12895,9 +11381,7 @@ /* Skip 1 cache entry */ // _GUARD_TYPE_VERSION { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = read_u32(&this_instr[2].cache); PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); @@ -12909,27 +11393,21 @@ } // _REPLACE_WITH_TRUE { - /* Variables=['owner'ML]; base=-1; sp=0; logical_sp=0 */ value = owner; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; } - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(TO_BOOL_BOOL) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_BOOL; (void)(opcode); @@ -12944,7 +11422,6 @@ /* Skip 1 cache entry */ /* Skip 2 cache entries */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_BoolCheck(value)) { UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); @@ -12955,7 +11432,6 @@ } TARGET(TO_BOOL_INT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_INT; (void)(opcode); @@ -12971,7 +11447,6 @@ /* Skip 1 cache entry */ /* Skip 2 cache entries */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UPDATE_MISS_STATS(TO_BOOL); @@ -12986,21 +11461,17 @@ else { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; stack_pointer += 1; } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(TO_BOOL_LIST) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_LIST; (void)(opcode); @@ -13016,7 +11487,6 @@ /* Skip 1 cache entry */ /* Skip 2 cache entries */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyList_CheckExact(value_o)) { UPDATE_MISS_STATS(TO_BOOL); @@ -13028,16 +11498,13 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = res; - /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); DISPATCH(); } TARGET(TO_BOOL_NONE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_NONE; (void)(opcode); @@ -13053,7 +11520,6 @@ /* Skip 1 cache entry */ /* Skip 2 cache entries */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (!PyStackRef_IsNone(value)) { UPDATE_MISS_STATS(TO_BOOL); assert(_PyOpcode_Deopt[opcode] == (TO_BOOL)); @@ -13061,14 +11527,11 @@ } STAT_INC(TO_BOOL, hit); res = PyStackRef_False; - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(TO_BOOL_STR) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = TO_BOOL_STR; (void)(opcode); @@ -13083,9 +11546,7 @@ _PyStackRef res; // _GUARD_TOS_UNICODE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UPDATE_MISS_STATS(TO_BOOL); @@ -13097,7 +11558,6 @@ /* Skip 2 cache entries */ // _TO_BOOL_STR { - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ STAT_INC(TO_BOOL, hit); PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (value_o == &_Py_STR(empty)) { @@ -13108,7 +11568,6 @@ assert(Py_SIZE(value_o)); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13116,14 +11575,11 @@ stack_pointer += 1; } } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(UNARY_INVERT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNARY_INVERT; (void)(opcode); @@ -13134,13 +11590,11 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Invert(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13148,17 +11602,13 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(UNARY_NEGATIVE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNARY_NEGATIVE; (void)(opcode); @@ -13169,13 +11619,11 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Negative(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13183,17 +11631,13 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(UNARY_NOT) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNARY_NOT; (void)(opcode); @@ -13204,18 +11648,14 @@ _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(PyStackRef_BoolCheck(value)); res = PyStackRef_IsFalse(value) ? PyStackRef_True : PyStackRef_False; - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } TARGET(UNPACK_EX) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_EX; (void)(opcode); @@ -13226,12 +11666,10 @@ _PyStackRef seq; _PyStackRef *top; seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ top = &stack_pointer[(oparg & 0xFF) + (oparg >> 8)]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg & 0xFF, oparg >> 8, top); Py_DECREF(seq_o); @@ -13241,12 +11679,10 @@ } stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['unused'A, 'unused', 'unused'A, 'top'A]; base=-1; sp=(oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ DISPATCH(); } TARGET(UNPACK_SEQUENCE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_SEQUENCE; (void)(opcode); @@ -13261,9 +11697,7 @@ _PyStackRef *top; // _SPECIALIZE_UNPACK_SEQUENCE { - /* Variables=[]; base=0; sp=0; logical_sp=0 */ seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint16_t counter = read_u16(&this_instr[1].cache); (void)counter; #if ENABLE_SPECIALIZATION_FT @@ -13282,12 +11716,10 @@ } // _UNPACK_SEQUENCE { - /* Variables=['seq'ML]; base=-1; sp=0; logical_sp=0 */ top = &stack_pointer[-1 + oparg]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg, -1, top); Py_DECREF(seq_o); @@ -13298,12 +11730,10 @@ } stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['unused'A, 'top'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ DISPATCH(); } TARGET(UNPACK_SEQUENCE_LIST) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_SEQUENCE_LIST; (void)(opcode); @@ -13318,7 +11748,6 @@ _PyStackRef *values; /* Skip 1 cache entry */ seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyList_CheckExact(seq_o)) { @@ -13347,7 +11776,6 @@ UNLOCK_OBJECT(seq_o); stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13355,7 +11783,6 @@ } TARGET(UNPACK_SEQUENCE_TUPLE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_SEQUENCE_TUPLE; (void)(opcode); @@ -13370,7 +11797,6 @@ _PyStackRef *values; /* Skip 1 cache entry */ seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { @@ -13390,7 +11816,6 @@ } stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13398,7 +11823,6 @@ } TARGET(UNPACK_SEQUENCE_TWO_TUPLE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = UNPACK_SEQUENCE_TWO_TUPLE; (void)(opcode); @@ -13414,7 +11838,6 @@ _PyStackRef val0; /* Skip 1 cache entry */ seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(oparg == 2); PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); if (!PyTuple_CheckExact(seq_o)) { @@ -13430,15 +11853,10 @@ STAT_INC(UNPACK_SEQUENCE, hit); val0 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 0)); val1 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 1)); - /* Variables=['val1'L, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = val1; - /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = val0; - /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=1; logical_sp=1 */ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -13446,7 +11864,6 @@ } TARGET(WITH_EXCEPT_START) { - assert(STACK_LEVEL() - 5 >= -1); #if Py_TAIL_CALL_INTERP int opcode = WITH_EXCEPT_START; (void)(opcode); @@ -13460,13 +11877,9 @@ _PyStackRef val; _PyStackRef res; val = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ lasti = stack_pointer[-3]; - /* Variables=[]; base=-3; sp=0; logical_sp=-3 */ exit_self = stack_pointer[-4]; - /* Variables=[]; base=-4; sp=0; logical_sp=-4 */ exit_func = stack_pointer[-5]; - /* Variables=[]; base=-5; sp=0; logical_sp=-5 */ PyObject *exc, *tb; PyObject *val_o = PyStackRef_AsPyObjectBorrow(val); PyObject *exit_func_o = PyStackRef_AsPyObjectBorrow(exit_func); @@ -13489,17 +11902,13 @@ JUMP_TO_LABEL(error); } res = PyStackRef_FromPyObjectSteal(res_o); - /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'L]; base=-5; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'ML]; base=-5; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['exit_func'ML, 'exit_self'ML, 'lasti'ML, 'unused'M, 'val'ML, 'res'ML]; base=-5; sp=1; logical_sp=1 */ DISPATCH(); } TARGET(YIELD_VALUE) { - assert(STACK_LEVEL() - 1 >= -1); #if Py_TAIL_CALL_INTERP int opcode = YIELD_VALUE; (void)(opcode); @@ -13510,7 +11919,6 @@ _PyStackRef retval; _PyStackRef value; retval = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); frame->instr_ptr++; PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); @@ -13520,7 +11928,6 @@ _PyStackRef temp = retval; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ _PyFrame_SetStackPointer(frame, stack_pointer); tstate->exc_info = gen->gi_exc_state.previous_item; gen->gi_exc_state.previous_item = NULL; @@ -13541,12 +11948,9 @@ LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); - /* Variables=['value'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ DISPATCH(); } @@ -13578,25 +11982,29 @@ JUMP_TO_LABEL(error); LABEL(pop_4_error) { - STACK_SHRINK(4); + stack_pointer -= 4; + assert(WITHIN_STACK_BOUNDS()); JUMP_TO_LABEL(error); } LABEL(pop_3_error) { - STACK_SHRINK(3); + stack_pointer -= 3; + assert(WITHIN_STACK_BOUNDS()); JUMP_TO_LABEL(error); } LABEL(pop_2_error) { - STACK_SHRINK(2); + stack_pointer -= 2; + assert(WITHIN_STACK_BOUNDS()); JUMP_TO_LABEL(error); } LABEL(pop_1_error) { - STACK_SHRINK(1); + stack_pointer -= 1; + assert(WITHIN_STACK_BOUNDS()); JUMP_TO_LABEL(error); } diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index f240fc58039985..f5cd1697fbacda 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -31,36 +31,27 @@ if (sym_is_null(value)) { ctx->done = true; } - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _LOAD_FAST: { JitOptSymbol *value; value = GETLOCAL(oparg); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _LOAD_FAST_BORROW: { JitOptSymbol *value; value = GETLOCAL(oparg); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -69,12 +60,9 @@ value = GETLOCAL(oparg); JitOptSymbol *temp = sym_new_null(ctx); GETLOCAL(oparg) = temp; - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -86,12 +74,9 @@ int opcode = _Py_IsImmortal(val) ? _LOAD_CONST_INLINE_BORROW : _LOAD_CONST_INLINE; REPLACE_OP(this_instr, opcode, 0, (uintptr_t)val); value = sym_new_const(ctx, val); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -100,12 +85,9 @@ PyObject *val = PyTuple_GET_ITEM(co->co_consts, this_instr->oparg); REPLACE_OP(this_instr, _LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)val); value = sym_new_const(ctx, val); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -113,70 +95,55 @@ JitOptSymbol *value; PyObject *val = PyLong_FromLong(this_instr->oparg); value = sym_new_const(ctx, val); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _STORE_FAST: { JitOptSymbol *value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ GETLOCAL(oparg) = value; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _POP_TOP: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _PUSH_NULL: { JitOptSymbol *res; res = sym_new_null(ctx); - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } case _END_FOR: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _END_SEND: { JitOptSymbol *val; val = sym_new_not_null(ctx); - /* Variables=['val'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = val; - /* Variables=['val'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _UNARY_NEGATIVE: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -184,12 +151,9 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ sym_set_type(value, &PyBool_Type); res = sym_new_truthiness(ctx, value, false); - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -197,14 +161,11 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { res = sym_new_truthiness(ctx, value, true); } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -212,15 +173,12 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { sym_set_type(value, &PyBool_Type); res = sym_new_truthiness(ctx, value, true); } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -228,15 +186,12 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { sym_set_type(value, &PyLong_Type); res = sym_new_truthiness(ctx, value, true); } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -244,15 +199,12 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { sym_set_type(value, &PyList_Type); res = sym_new_type(ctx, &PyBool_Type); } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -260,22 +212,18 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { sym_set_const(value, Py_None); res = sym_new_const(ctx, Py_False); } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GUARD_NOS_UNICODE: { JitOptSymbol *nos; nos = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_matches_type(nos, &PyUnicode_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -286,7 +234,6 @@ case _GUARD_TOS_UNICODE: { JitOptSymbol *value; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_matches_type(value, &PyUnicode_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -298,39 +245,31 @@ JitOptSymbol *value; JitOptSymbol *res; value = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ int already_bool = optimize_to_bool(this_instr, ctx, value, &res); if (!already_bool) { res = sym_new_truthiness(ctx, value, true); } - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _REPLACE_WITH_TRUE: { JitOptSymbol *res; res = sym_new_const(ctx, Py_True); - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _UNARY_INVERT: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GUARD_NOS_INT: { JitOptSymbol *nos; nos = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_matches_type(nos, &PyLong_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -341,7 +280,6 @@ case _GUARD_TOS_INT: { JitOptSymbol *tos; tos = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_matches_type(tos, &PyLong_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -354,9 +292,7 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyLong_CheckExact(sym_get_const(ctx, left))); assert(PyLong_CheckExact(sym_get_const(ctx, right))); @@ -366,21 +302,16 @@ goto error; } res = sym_new_const(ctx, temp); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyLong_Type); stack_pointer += -1; } - /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -389,9 +320,7 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyLong_CheckExact(sym_get_const(ctx, left))); assert(PyLong_CheckExact(sym_get_const(ctx, right))); @@ -401,21 +330,16 @@ goto error; } res = sym_new_const(ctx, temp); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyLong_Type); stack_pointer += -1; } - /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -424,9 +348,7 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyLong_CheckExact(sym_get_const(ctx, left))); assert(PyLong_CheckExact(sym_get_const(ctx, right))); @@ -436,28 +358,22 @@ goto error; } res = sym_new_const(ctx, temp); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyLong_Type); stack_pointer += -1; } - /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _GUARD_NOS_FLOAT: { JitOptSymbol *nos; nos = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_matches_type(nos, &PyFloat_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -468,7 +384,6 @@ case _GUARD_TOS_FLOAT: { JitOptSymbol *tos; tos = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_matches_type(tos, &PyFloat_Type)) { REPLACE_OP(this_instr, _NOP, 0, 0); } @@ -481,9 +396,7 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyFloat_CheckExact(sym_get_const(ctx, left))); assert(PyFloat_CheckExact(sym_get_const(ctx, right))); @@ -494,21 +407,16 @@ goto error; } res = sym_new_const(ctx, temp); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyFloat_Type); stack_pointer += -1; } - /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -517,9 +425,7 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyFloat_CheckExact(sym_get_const(ctx, left))); assert(PyFloat_CheckExact(sym_get_const(ctx, right))); @@ -530,21 +436,16 @@ goto error; } res = sym_new_const(ctx, temp); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyFloat_Type); stack_pointer += -1; } - /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -553,9 +454,7 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyFloat_CheckExact(sym_get_const(ctx, left))); assert(PyFloat_CheckExact(sym_get_const(ctx, right))); @@ -566,21 +465,16 @@ goto error; } res = sym_new_const(ctx, temp); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyFloat_Type); stack_pointer += -1; } - /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -589,9 +483,7 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyUnicode_CheckExact(sym_get_const(ctx, left))); assert(PyUnicode_CheckExact(sym_get_const(ctx, right))); @@ -600,21 +492,16 @@ goto error; } res = sym_new_const(ctx, temp); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(temp); } else { res = sym_new_type(ctx, &PyUnicode_Type); stack_pointer += -1; } - /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -622,9 +509,7 @@ JitOptSymbol *right; JitOptSymbol *left; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ JitOptSymbol *res; if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyUnicode_CheckExact(sym_get_const(ctx, left))); @@ -642,7 +527,6 @@ GETLOCAL(this_instr->operand0) = res; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } @@ -653,91 +537,69 @@ case _BINARY_OP_EXTEND: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_SLICE: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; - /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _STORE_SLICE: { stack_pointer += -4; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-4; sp=-4; logical_sp=-4 */ break; } case _BINARY_OP_SUBSCR_LIST_INT: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_OP_SUBSCR_STR_INT: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_OP_SUBSCR_TUPLE_INT: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_OP_SUBSCR_DICT: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _BINARY_OP_SUBSCR_CHECK_FUNC: { JitOptSymbol *getitem; getitem = sym_new_not_null(ctx); - /* Variables=['container', 'unused', 'getitem'L]; base=-2; sp=0; logical_sp=1 */ stack_pointer[0] = getitem; - /* Variables=['container', 'unused', 'getitem'ML]; base=-2; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['container', 'unused', 'getitem'ML]; base=-2; sp=1; logical_sp=1 */ break; } @@ -745,75 +607,61 @@ _Py_UOpsAbstractFrame *new_frame; new_frame = NULL; ctx->done = true; - /* Variables=['new_frame'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = (JitOptSymbol *)new_frame; - /* Variables=['new_frame'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _LIST_APPEND: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list', 'unused'A]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } case _SET_ADD: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set', 'unused'A]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } case _STORE_SUBSCR: { stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ break; } case _STORE_SUBSCR_LIST_INT: { stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ break; } case _STORE_SUBSCR_DICT: { stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ break; } case _DELETE_SUBSCR: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } case _CALL_INTRINSIC_1: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _CALL_INTRINSIC_2: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -821,11 +669,9 @@ JitOptSymbol *retval; JitOptSymbol *res; retval = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ JitOptSymbol *temp = retval; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ ctx->frame->stack_pointer = stack_pointer; frame_pop(ctx); stack_pointer = ctx->frame->stack_pointer; @@ -840,42 +686,32 @@ ctx->done = true; } res = temp; - /* Variables=['res'L]; base=-1; sp=-1; logical_sp=0 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=-1; sp=-1; logical_sp=0 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GET_AITER: { JitOptSymbol *iter; iter = sym_new_not_null(ctx); - /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GET_ANEXT: { JitOptSymbol *awaitable; awaitable = sym_new_not_null(ctx); - /* Variables=['aiter', 'awaitable'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = awaitable; - /* Variables=['aiter', 'awaitable'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['aiter', 'awaitable'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _GET_AWAITABLE: { JitOptSymbol *iter; iter = sym_new_not_null(ctx); - /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -889,47 +725,37 @@ case _YIELD_VALUE: { JitOptSymbol *res; res = sym_new_unknown(ctx); - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _POP_EXCEPT: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _LOAD_COMMON_CONSTANT: { JitOptSymbol *value; value = sym_new_not_null(ctx); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _LOAD_BUILD_CLASS: { JitOptSymbol *bc; bc = sym_new_not_null(ctx); - /* Variables=['bc'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = bc; - /* Variables=['bc'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['bc'ML]; base=0; sp=1; logical_sp=1 */ break; } case _STORE_NAME: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -945,7 +771,6 @@ } stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ break; } @@ -954,18 +779,12 @@ JitOptSymbol *val1; JitOptSymbol *val0; seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ val0 = sym_tuple_getitem(ctx, seq, 0); val1 = sym_tuple_getitem(ctx, seq, 1); - /* Variables=['val1'L, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = val1; - /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['val1'ML, 'val0'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = val0; - /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['val1'ML, 'val0'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -973,14 +792,12 @@ JitOptSymbol *seq; JitOptSymbol **values; seq = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ values = &stack_pointer[-1]; for (int i = 0; i < oparg; i++) { values[i] = sym_tuple_getitem(ctx, seq, i); } stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'A]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ break; } @@ -992,7 +809,6 @@ } stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'LA]; base=-1; sp=-1 + oparg; logical_sp=-1 + oparg */ break; } @@ -1005,28 +821,24 @@ } stack_pointer += (oparg & 0xFF) + (oparg >> 8); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['values'A, 'unused', 'unused'A]; base=-1; sp=(oparg & 0xFF) + (oparg >> 8); logical_sp=(oparg & 0xFF) + (oparg >> 8) */ break; } case _STORE_ATTR: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } case _DELETE_ATTR: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _STORE_GLOBAL: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -1037,12 +849,9 @@ case _LOAD_LOCALS: { JitOptSymbol *locals; locals = sym_new_not_null(ctx); - /* Variables=['locals'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = locals; - /* Variables=['locals'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['locals'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -1051,12 +860,9 @@ case _LOAD_NAME: { JitOptSymbol *v; v = sym_new_not_null(ctx); - /* Variables=['v'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = v; - /* Variables=['v'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['v'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -1066,7 +872,6 @@ res[0] = sym_new_not_null(ctx); stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'LA]; base=0; sp=1; logical_sp=1 */ break; } @@ -1082,7 +887,6 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['null'A]; base=0; sp=(oparg & 1); logical_sp=(oparg & 1) */ break; } @@ -1093,24 +897,18 @@ case _LOAD_GLOBAL_MODULE: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } case _LOAD_GLOBAL_BUILTINS: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -1129,28 +927,22 @@ case _LOAD_FROM_DICT_OR_DEREF: { JitOptSymbol *value; value = sym_new_not_null(ctx); - /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _LOAD_DEREF: { JitOptSymbol *value; value = sym_new_not_null(ctx); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } case _STORE_DEREF: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -1161,12 +953,9 @@ case _BUILD_STRING: { JitOptSymbol *str; str = sym_new_not_null(ctx); - /* Variables=['str'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = str; - /* Variables=['str'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['str'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } @@ -1174,64 +963,49 @@ JitOptSymbol **values; JitOptSymbol *tup; values = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ tup = sym_new_tuple(ctx, oparg, values); - /* Variables=['tup'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = tup; - /* Variables=['tup'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['tup'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } case _BUILD_LIST: { JitOptSymbol *list; list = sym_new_not_null(ctx); - /* Variables=['list'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = list; - /* Variables=['list'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } case _LIST_EXTEND: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['list_st', 'unused'A]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } case _SET_UPDATE: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set', 'unused'A]; base=-2 - (oparg-1); sp=-1; logical_sp=-1 */ break; } case _BUILD_SET: { JitOptSymbol *set; set = sym_new_not_null(ctx); - /* Variables=['set'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = set; - /* Variables=['set'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['set'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } case _BUILD_MAP: { JitOptSymbol *map; map = sym_new_not_null(ctx); - /* Variables=['map'L]; base=-oparg*2; sp=0; logical_sp=1 - oparg*2 */ stack_pointer[-oparg*2] = map; - /* Variables=['map'ML]; base=-oparg*2; sp=0; logical_sp=1 - oparg*2 */ stack_pointer += 1 - oparg*2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['map'ML]; base=-oparg*2; sp=1 - oparg*2; logical_sp=1 - oparg*2 */ break; } @@ -1242,33 +1016,27 @@ case _DICT_UPDATE: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict', 'unused'A]; base=-2 - (oparg - 1); sp=-1; logical_sp=-1 */ break; } case _DICT_MERGE: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['callable', 'unused', 'unused', 'dict', 'unused'A]; base=-5 - (oparg - 1); sp=-1; logical_sp=-1 */ break; } case _MAP_ADD: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['dict_st', 'unused'A]; base=-3 - (oparg - 1); sp=-2; logical_sp=-2 */ break; } case _LOAD_SUPER_ATTR_ATTR: { JitOptSymbol *attr_st; attr_st = sym_new_not_null(ctx); - /* Variables=['attr_st'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = attr_st; - /* Variables=['attr_st'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr_st'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -1277,15 +1045,10 @@ JitOptSymbol *self_or_null; attr = sym_new_not_null(ctx); self_or_null = sym_new_not_null(ctx); - /* Variables=['attr'L, 'self_or_null'L]; base=-3; sp=0; logical_sp=-1 */ stack_pointer[-3] = attr; - /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=0; logical_sp=-1 */ - /* Variables=['attr'ML, 'self_or_null'L]; base=-3; sp=0; logical_sp=-1 */ stack_pointer[-2] = self_or_null; - /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'ML]; base=-3; sp=-1; logical_sp=-1 */ break; } @@ -1294,26 +1057,21 @@ JitOptSymbol *attr; JitOptSymbol **self_or_null; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ self_or_null = &stack_pointer[0]; (void)owner; attr = sym_new_not_null(ctx); if (oparg &1) { self_or_null[0] = sym_new_unknown(ctx); } - /* Variables=['attr'L, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=0; logical_sp=(oparg&1) */ stack_pointer += (oparg&1); assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'A]; base=-1; sp=(oparg&1); logical_sp=(oparg&1) */ break; } case _GUARD_TYPE_VERSION: { JitOptSymbol *owner; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t type_version = (uint32_t)this_instr->operand0; assert(type_version); if (sym_matches_type_version(owner, type_version)) { @@ -1343,9 +1101,7 @@ uint16_t offset = (uint16_t)this_instr->operand0; attr = sym_new_not_null(ctx); (void)offset; - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1353,7 +1109,6 @@ JitOptSymbol *owner; JitOptSymbol *attr; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ uint32_t dict_version = (uint32_t)this_instr->operand0; uint16_t index = (uint16_t)this_instr->operand0; (void)dict_version; @@ -1363,9 +1118,7 @@ PyModuleObject *mod = (PyModuleObject *)sym_get_const(ctx, owner); if (PyModule_CheckExact(mod)) { PyObject *dict = mod->md_dict; - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ uint64_t watched_mutations = get_mutations(dict); if (watched_mutations < _Py_MAX_ALLOWED_GLOBALS_MODIFICATIONS) { PyDict_Watch(GLOBALS_WATCHER_ID, dict); @@ -1378,9 +1131,7 @@ if (attr == NULL) { attr = sym_new_not_null(ctx); } - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1389,9 +1140,7 @@ uint16_t hint = (uint16_t)this_instr->operand0; attr = sym_new_not_null(ctx); (void)hint; - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1400,9 +1149,7 @@ uint16_t index = (uint16_t)this_instr->operand0; attr = sym_new_not_null(ctx); (void)index; - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1415,9 +1162,7 @@ PyObject *descr = (PyObject *)this_instr->operand0; attr = sym_new_not_null(ctx); (void)descr; - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1427,9 +1172,7 @@ (void)fget; new_frame = NULL; ctx->done = true; - /* Variables=['new_frame'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = (JitOptSymbol *)new_frame; - /* Variables=['new_frame'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1442,21 +1185,18 @@ case _STORE_ATTR_INSTANCE_VALUE: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } case _STORE_ATTR_WITH_HINT: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } case _STORE_ATTR_SLOT: { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-2; sp=-2; logical_sp=-2 */ break; } @@ -1468,24 +1208,18 @@ else { res = _Py_uop_sym_new_not_null(ctx); } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _COMPARE_OP_FLOAT: { JitOptSymbol *res; res = sym_new_type(ctx, &PyBool_Type); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1494,9 +1228,7 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ if (sym_is_const(ctx, left) && sym_is_const(ctx, right)) { assert(PyLong_CheckExact(sym_get_const(ctx, left))); assert(PyLong_CheckExact(sym_get_const(ctx, right))); @@ -1510,81 +1242,61 @@ assert(_Py_IsImmortal(tmp)); REPLACE_OP(this_instr, _POP_TWO_LOAD_CONST_INLINE_BORROW, 0, (uintptr_t)tmp); res = sym_new_const(ctx, tmp); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ Py_DECREF(tmp); } else { res = sym_new_type(ctx, &PyBool_Type); stack_pointer += -1; } - /* Variables=['res'L]; base=-2; sp=-1; logical_sp=-1 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _COMPARE_OP_STR: { JitOptSymbol *res; res = sym_new_type(ctx, &PyBool_Type); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _IS_OP: { JitOptSymbol *res; res = sym_new_type(ctx, &PyBool_Type); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _CONTAINS_OP: { JitOptSymbol *res; res = sym_new_type(ctx, &PyBool_Type); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _CONTAINS_OP_SET: { JitOptSymbol *b; b = sym_new_not_null(ctx); - /* Variables=['b'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = b; - /* Variables=['b'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _CONTAINS_OP_DICT: { JitOptSymbol *b; b = sym_new_not_null(ctx); - /* Variables=['b'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = b; - /* Variables=['b'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['b'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -1593,45 +1305,33 @@ JitOptSymbol *match; rest = sym_new_not_null(ctx); match = sym_new_not_null(ctx); - /* Variables=['rest'L, 'match'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-2] = rest; - /* Variables=['rest'ML, 'match'L]; base=-2; sp=0; logical_sp=0 */ - /* Variables=['rest'ML, 'match'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = match; - /* Variables=['rest'ML, 'match'ML]; base=-2; sp=0; logical_sp=0 */ break; } case _CHECK_EXC_MATCH: { JitOptSymbol *b; b = sym_new_not_null(ctx); - /* Variables=['left', 'b'L]; base=-2; sp=0; logical_sp=0 */ stack_pointer[-1] = b; - /* Variables=['left', 'b'ML]; base=-2; sp=0; logical_sp=0 */ break; } case _IMPORT_NAME: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } case _IMPORT_FROM: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['from', 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['from', 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['from', 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1642,87 +1342,66 @@ case _IS_NONE: { JitOptSymbol *b; b = sym_new_not_null(ctx); - /* Variables=['b'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = b; - /* Variables=['b'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GET_LEN: { JitOptSymbol *len; len = sym_new_not_null(ctx); - /* Variables=['obj', 'len'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = len; - /* Variables=['obj', 'len'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['obj', 'len'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _MATCH_CLASS: { JitOptSymbol *attrs; attrs = sym_new_not_null(ctx); - /* Variables=['attrs'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = attrs; - /* Variables=['attrs'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attrs'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _MATCH_MAPPING: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['subject', 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['subject', 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject', 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _MATCH_SEQUENCE: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['subject', 'res'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['subject', 'res'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject', 'res'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _MATCH_KEYS: { JitOptSymbol *values_or_none; values_or_none = sym_new_not_null(ctx); - /* Variables=['subject', 'keys', 'values_or_none'L]; base=-2; sp=0; logical_sp=1 */ stack_pointer[0] = values_or_none; - /* Variables=['subject', 'keys', 'values_or_none'ML]; base=-2; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['subject', 'keys', 'values_or_none'ML]; base=-2; sp=1; logical_sp=1 */ break; } case _GET_ITER: { JitOptSymbol *iter; iter = sym_new_not_null(ctx); - /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _GET_YIELD_FROM_ITER: { JitOptSymbol *iter; iter = sym_new_not_null(ctx); - /* Variables=['iter'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = iter; - /* Variables=['iter'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1731,12 +1410,9 @@ case _FOR_ITER_TIER_TWO: { JitOptSymbol *next; next = sym_new_not_null(ctx); - /* Variables=['iter', 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter', 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter', 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1757,12 +1433,9 @@ case _ITER_NEXT_LIST_TIER_TWO: { JitOptSymbol *next; next = sym_new_not_null(ctx); - /* Variables=['iter', 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter', 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter', 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1779,12 +1452,9 @@ case _ITER_NEXT_TUPLE: { JitOptSymbol *next; next = sym_new_not_null(ctx); - /* Variables=['iter', 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter', 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter', 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1801,12 +1471,9 @@ case _ITER_NEXT_RANGE: { JitOptSymbol *next; next = sym_new_type(ctx, &PyLong_Type); - /* Variables=['iter'M, 'next'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = next; - /* Variables=['iter'M, 'next'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['iter'M, 'next'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1820,27 +1487,19 @@ JitOptSymbol *self_or_null; attr = sym_new_not_null(ctx); self_or_null = sym_new_unknown(ctx); - /* Variables=['attr'L, 'self_or_null'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self_or_null'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self_or_null; - /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self_or_null'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _WITH_EXCEPT_START: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['exit_func', 'exit_self', 'lasti', 'unused', 'val', 'res'L]; base=-5; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['exit_func', 'exit_self', 'lasti', 'unused', 'val', 'res'ML]; base=-5; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['exit_func', 'exit_self', 'lasti', 'unused', 'val', 'res'ML]; base=-5; sp=1; logical_sp=1 */ break; } @@ -1849,15 +1508,10 @@ JitOptSymbol *new_exc; prev_exc = sym_new_not_null(ctx); new_exc = sym_new_not_null(ctx); - /* Variables=['prev_exc'L, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = prev_exc; - /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['prev_exc'ML, 'new_exc'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = new_exc; - /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['prev_exc'ML, 'new_exc'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1874,20 +1528,14 @@ JitOptSymbol *attr; JitOptSymbol *self; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)this_instr->operand0; (void)descr; attr = sym_new_not_null(ctx); self = owner; - /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1896,38 +1544,28 @@ JitOptSymbol *attr; JitOptSymbol *self; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)this_instr->operand0; (void)descr; attr = sym_new_not_null(ctx); self = owner; - /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } case _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES: { JitOptSymbol *attr; attr = sym_new_not_null(ctx); - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _LOAD_ATTR_NONDESCRIPTOR_NO_DICT: { JitOptSymbol *attr; attr = sym_new_not_null(ctx); - /* Variables=['attr'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -1940,20 +1578,14 @@ JitOptSymbol *attr; JitOptSymbol *self; owner = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ PyObject *descr = (PyObject *)this_instr->operand0; (void)descr; attr = sym_new_not_null(ctx); self = owner; - /* Variables=['attr'L, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[-1] = attr; - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ - /* Variables=['attr'ML, 'self'L]; base=-1; sp=0; logical_sp=1 */ stack_pointer[0] = self; - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['attr'ML, 'self'ML]; base=-1; sp=1; logical_sp=1 */ break; } @@ -1962,17 +1594,12 @@ JitOptSymbol *func; JitOptSymbol *maybe_self; args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ args = &stack_pointer[-oparg]; (void)args; func = sym_new_not_null(ctx); maybe_self = sym_new_not_null(ctx); - /* Variables=['func'L, 'maybe_self'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-2 - oparg] = func; - /* Variables=['func'ML, 'maybe_self'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ - /* Variables=['func'ML, 'maybe_self'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1 - oparg] = maybe_self; - /* Variables=['func'ML, 'maybe_self'ML, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ break; } @@ -1990,19 +1617,15 @@ break; } new_frame = frame_new(ctx, co, 0, NULL, 0); - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = (JitOptSymbol *)new_frame; - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CHECK_FUNCTION_VERSION: { JitOptSymbol *callable; callable = stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ uint32_t func_version = (uint32_t)this_instr->operand0; if (sym_is_const(ctx, callable) && sym_matches_type(callable, &PyFunction_Type)) { assert(PyFunction_Check(sym_get_const(ctx, callable))); @@ -2032,12 +1655,9 @@ case _CALL_NON_PY_GENERAL: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -2045,9 +1665,7 @@ JitOptSymbol *null; JitOptSymbol *callable; null = stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ sym_set_null(null); sym_set_type(callable, &PyMethod_Type); break; @@ -2057,9 +1675,7 @@ JitOptSymbol **self_or_null; JitOptSymbol **callable; self_or_null = &stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = &stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ callable[0] = sym_new_not_null(ctx); self_or_null[0] = sym_new_not_null(ctx); break; @@ -2076,9 +1692,7 @@ JitOptSymbol *self_or_null; JitOptSymbol *callable; self_or_null = stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ callable = stack_pointer[-2 - oparg]; - /* Variables=[]; base=-2 - oparg; sp=0; logical_sp=-2 - oparg */ assert(sym_matches_type(callable, &PyFunction_Type)); if (sym_is_const(ctx, callable)) { if (sym_is_null(self_or_null) || sym_is_not_null(self_or_null)) { @@ -2103,9 +1717,7 @@ JitOptSymbol *self_or_null; _Py_UOpsAbstractFrame *new_frame; args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ self_or_null = stack_pointer[-1 - oparg]; - /* Variables=[]; base=-1 - oparg; sp=0; logical_sp=-1 - oparg */ int argcount = oparg; PyCodeObject *co = NULL; assert((this_instr + 2)->opcode == _PUSH_FRAME); @@ -2125,22 +1737,17 @@ } else { new_frame = frame_new(ctx, co, 0, NULL, 0); } - /* Variables=['new_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = (JitOptSymbol *)new_frame; - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _PUSH_FRAME: { _Py_UOpsAbstractFrame *new_frame; new_frame = (_Py_UOpsAbstractFrame *)stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ ctx->frame->stack_pointer = stack_pointer; ctx->frame = new_frame; ctx->curr_frame_depth++; @@ -2171,36 +1778,27 @@ case _CALL_TYPE_1: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; - /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _CALL_STR_1: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; - /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } case _CALL_TUPLE_1: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-3; sp=0; logical_sp=-2 */ stack_pointer[-3] = res; - /* Variables=['res'ML]; base=-3; sp=0; logical_sp=-2 */ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3; sp=-2; logical_sp=-2 */ break; } @@ -2209,19 +1807,14 @@ JitOptSymbol *self; JitOptSymbol *init; args = &stack_pointer[-oparg]; - /* Variables=[]; base=-oparg; sp=0; logical_sp=-oparg */ args = &stack_pointer[-oparg]; uint32_t type_version = (uint32_t)this_instr->operand0; (void)type_version; (void)args; self = sym_new_not_null(ctx); init = sym_new_not_null(ctx); - /* Variables=['self'L, 'init'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-2 - oparg] = self; - /* Variables=['self'ML, 'init'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ - /* Variables=['self'ML, 'init'L, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1 - oparg] = init; - /* Variables=['self'ML, 'init'ML, 'args'A]; base=-2 - oparg; sp=0; logical_sp=0 */ break; } @@ -2229,146 +1822,111 @@ _Py_UOpsAbstractFrame *init_frame; init_frame = NULL; ctx->done = true; - /* Variables=['init_frame'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = (JitOptSymbol *)init_frame; - /* Variables=['init_frame'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['init_frame'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _EXIT_INIT_CHECK: { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _CALL_BUILTIN_CLASS: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_BUILTIN_O: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_BUILTIN_FAST: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_BUILTIN_FAST_WITH_KEYWORDS: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_LEN: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_ISINSTANCE: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_LIST_APPEND: { stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-3; sp=-3; logical_sp=-3 */ break; } case _CALL_METHOD_DESCRIPTOR_O: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_METHOD_DESCRIPTOR_NOARGS: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } case _CALL_METHOD_DESCRIPTOR_FAST: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer[-2 - oparg] = res; - /* Variables=['res'ML]; base=-2 - oparg; sp=0; logical_sp=-1 - oparg */ stack_pointer += -1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2 - oparg; sp=-1 - oparg; logical_sp=-1 - oparg */ break; } @@ -2377,9 +1935,7 @@ case _MAYBE_EXPAND_METHOD_KW: { JitOptSymbol *kwnames_out; kwnames_out = sym_new_not_null(ctx); - /* Variables=['callable'A, 'self_or_null'A, 'args'A, 'kwnames_out'L]; base=-3 - oparg; sp=0; logical_sp=0 */ stack_pointer[-1] = kwnames_out; - /* Variables=['callable'A, 'self_or_null'A, 'args'A, 'kwnames_out'ML]; base=-3 - oparg; sp=0; logical_sp=0 */ break; } @@ -2389,12 +1945,9 @@ _Py_UOpsAbstractFrame *new_frame; new_frame = NULL; ctx->done = true; - /* Variables=['new_frame'L]; base=-3 - oparg; sp=0; logical_sp=-2 - oparg */ stack_pointer[-3 - oparg] = (JitOptSymbol *)new_frame; - /* Variables=['new_frame'ML]; base=-3 - oparg; sp=0; logical_sp=-2 - oparg */ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['new_frame'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ break; } @@ -2417,12 +1970,9 @@ case _CALL_KW_NON_PY: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-3 - oparg; sp=0; logical_sp=-2 - oparg */ stack_pointer[-3 - oparg] = res; - /* Variables=['res'ML]; base=-3 - oparg; sp=0; logical_sp=-2 - oparg */ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-3 - oparg; sp=-2 - oparg; logical_sp=-2 - oparg */ break; } @@ -2431,12 +1981,8 @@ JitOptSymbol *kwargs_out; tuple = sym_new_not_null(ctx); kwargs_out = sym_new_not_null(ctx); - /* Variables=['func', 'unused', 'tuple'L, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-2] = tuple; - /* Variables=['func', 'unused', 'tuple'ML, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ - /* Variables=['func', 'unused', 'tuple'ML, 'kwargs_out'L]; base=-4; sp=0; logical_sp=0 */ stack_pointer[-1] = kwargs_out; - /* Variables=['func', 'unused', 'tuple'ML, 'kwargs_out'ML]; base=-4; sp=0; logical_sp=0 */ break; } @@ -2445,21 +1991,16 @@ case _MAKE_FUNCTION: { JitOptSymbol *func; func = sym_new_not_null(ctx); - /* Variables=['func'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = func; - /* Variables=['func'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _SET_FUNCTION_ATTRIBUTE: { JitOptSymbol *func_out; func_out = sym_new_not_null(ctx); - /* Variables=['func_out'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = func_out; - /* Variables=['func_out'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['func_out'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -2475,12 +2016,9 @@ assert(framesize > 0); assert(framesize <= curr_space); curr_space -= framesize; - /* Variables=['res'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = res; - /* Variables=['res'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=0; sp=1; logical_sp=1 */ co = get_code(this_instr); if (co == NULL) { ctx->done = true; @@ -2491,42 +2029,32 @@ case _BUILD_SLICE: { JitOptSymbol *slice; slice = sym_new_not_null(ctx); - /* Variables=['slice'L]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer[-oparg] = slice; - /* Variables=['slice'ML]; base=-oparg; sp=0; logical_sp=1 - oparg */ stack_pointer += 1 - oparg; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['slice'ML]; base=-oparg; sp=1 - oparg; logical_sp=1 - oparg */ break; } case _CONVERT_VALUE: { JitOptSymbol *result; result = sym_new_not_null(ctx); - /* Variables=['result'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = result; - /* Variables=['result'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _FORMAT_SIMPLE: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = res; - /* Variables=['res'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _FORMAT_WITH_SPEC: { JitOptSymbol *res; res = sym_new_not_null(ctx); - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -2534,15 +2062,11 @@ JitOptSymbol *bottom; JitOptSymbol *top; bottom = stack_pointer[-1 - (oparg-1)]; - /* Variables=[]; base=-1 - (oparg-1); sp=0; logical_sp=-1 - (oparg-1) */ assert(oparg > 0); top = bottom; - /* Variables=['bottom'ML, 'unused'MA, 'top'L]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer[0] = top; - /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['bottom'ML, 'unused'MA, 'top'ML]; base=-1 - (oparg-1); sp=1; logical_sp=1 */ break; } @@ -2551,9 +2075,7 @@ JitOptSymbol *left; JitOptSymbol *res; right = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ left = stack_pointer[-2]; - /* Variables=[]; base=-2; sp=0; logical_sp=-2 */ bool lhs_int = sym_matches_type(left, &PyLong_Type); bool rhs_int = sym_matches_type(right, &PyLong_Type); bool lhs_float = sym_matches_type(left, &PyFloat_Type); @@ -2587,12 +2109,9 @@ else { res = sym_new_type(ctx, &PyFloat_Type); } - /* Variables=['res'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = res; - /* Variables=['res'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['res'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } @@ -2600,9 +2119,7 @@ JitOptSymbol **top; JitOptSymbol **bottom; top = &stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ bottom = &stack_pointer[-2 - (oparg-2)]; - /* Variables=[]; base=-2 - (oparg-2); sp=0; logical_sp=-2 - (oparg-2) */ JitOptSymbol *temp = bottom[0]; bottom[0] = top[0]; top[0] = temp; @@ -2631,7 +2148,6 @@ case _GUARD_IS_TRUE_POP: { JitOptSymbol *flag; flag = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_is_const(ctx, flag)) { PyObject *value = sym_get_const(ctx, flag); assert(value != NULL); @@ -2640,14 +2156,12 @@ sym_set_const(flag, Py_True); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _GUARD_IS_FALSE_POP: { JitOptSymbol *flag; flag = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_is_const(ctx, flag)) { PyObject *value = sym_get_const(ctx, flag); assert(value != NULL); @@ -2656,14 +2170,12 @@ sym_set_const(flag, Py_False); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _GUARD_IS_NONE_POP: { JitOptSymbol *flag; flag = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_is_const(ctx, flag)) { PyObject *value = sym_get_const(ctx, flag); assert(value != NULL); @@ -2676,14 +2188,12 @@ sym_set_const(flag, Py_None); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } case _GUARD_IS_NOT_NONE_POP: { JitOptSymbol *flag; flag = stack_pointer[-1]; - /* Variables=[]; base=-1; sp=0; logical_sp=-1 */ if (sym_is_const(ctx, flag)) { PyObject *value = sym_get_const(ctx, flag); assert(value != NULL); @@ -2695,7 +2205,6 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=[]; base=-1; sp=-1; logical_sp=-1 */ break; } @@ -2734,12 +2243,9 @@ JitOptSymbol *value; PyObject *ptr = (PyObject *)this_instr->operand0; value = sym_new_const(ctx, ptr); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2747,9 +2253,7 @@ JitOptSymbol *value; PyObject *ptr = (PyObject *)this_instr->operand0; value = sym_new_const(ctx, ptr); - /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } @@ -2757,12 +2261,9 @@ JitOptSymbol *value; PyObject *ptr = (PyObject *)this_instr->operand0; value = sym_new_const(ctx, ptr); - /* Variables=['value'L]; base=0; sp=0; logical_sp=1 */ stack_pointer[0] = value; - /* Variables=['value'ML]; base=0; sp=0; logical_sp=1 */ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=0; sp=1; logical_sp=1 */ break; } @@ -2770,21 +2271,16 @@ JitOptSymbol *value; PyObject *ptr = (PyObject *)this_instr->operand0; value = sym_new_const(ctx, ptr); - /* Variables=['value'L]; base=-1; sp=0; logical_sp=0 */ stack_pointer[-1] = value; - /* Variables=['value'ML]; base=-1; sp=0; logical_sp=0 */ break; } case _POP_TWO_LOAD_CONST_INLINE_BORROW: { JitOptSymbol *value; value = sym_new_not_null(ctx); - /* Variables=['value'L]; base=-2; sp=0; logical_sp=-1 */ stack_pointer[-2] = value; - /* Variables=['value'ML]; base=-2; sp=0; logical_sp=-1 */ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - /* Variables=['value'ML]; base=-2; sp=-1; logical_sp=-1 */ break; } From d57724d14b64326723b6849e6dd69e65479311c3 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 4 Apr 2025 14:08:07 +0100 Subject: [PATCH 07/10] Remove incorrect comment --- Python/bytecodes.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 2444e9e44c862f..e6184f1aa0afd0 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -3169,8 +3169,6 @@ dummy_func( assert(Py_TYPE(iter_o) == &PyListIter_Type); PyListObject *seq = it->it_seq; assert(seq); - // The code generator doesn't understand #ifdef Py_GIL_DISABLED - // so put in some control flow #ifdef Py_GIL_DISABLED assert(_PyObject_IsUniquelyReferenced(iter_o)); assert(_Py_IsOwnedByCurrentThread((PyObject *)seq) || From f6e0395fb0ca3ce7936be79f2664869c1a271443 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 4 Apr 2025 14:12:21 +0100 Subject: [PATCH 08/10] Fix type annotation --- Tools/cases_generator/tier1_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/cases_generator/tier1_generator.py b/Tools/cases_generator/tier1_generator.py index 6a8b7ded357b12..aa8ed4ed83c651 100644 --- a/Tools/cases_generator/tier1_generator.py +++ b/Tools/cases_generator/tier1_generator.py @@ -75,7 +75,7 @@ def write_uop( stack: Stack, inst: Instruction, braces: bool, -) -> tuple[int, Stack]: +) -> tuple[bool, int, Stack]: # out.emit(stack.as_comment() + "\n") if isinstance(uop, Skip): entries = "entries" if uop.size > 1 else "entry" From 8132b98a9afb2bc7bce842522d4b9238f01aaefb Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 4 Apr 2025 14:25:30 +0100 Subject: [PATCH 09/10] Mark false positive --- Tools/cases_generator/generators_common.py | 2 +- Tools/cases_generator/tier1_generator.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/cases_generator/generators_common.py b/Tools/cases_generator/generators_common.py index b72bcf4fb9fbff..ca6104705fb3f2 100644 --- a/Tools/cases_generator/generators_common.py +++ b/Tools/cases_generator/generators_common.py @@ -551,7 +551,7 @@ def emit_MacroIfStmt( self.out.emit(tkn) if not r: reachable = False - else_storage.merge(storage, self.out) + else_storage.merge(storage, self.out) # type: ignore[possibly-undefined] storage = else_storage self.out.emit(stmt.endif) return reachable, None, storage diff --git a/Tools/cases_generator/tier1_generator.py b/Tools/cases_generator/tier1_generator.py index aa8ed4ed83c651..5a49c239ed1aa7 100644 --- a/Tools/cases_generator/tier1_generator.py +++ b/Tools/cases_generator/tier1_generator.py @@ -263,7 +263,7 @@ def generate_tier1_cases( insert_braces = len([p for p in inst.parts if isinstance(p, Uop)]) > 1 reachable, offset, stack = write_uop(part, emitter, offset, stack, inst, insert_braces) out.start_line() - if reachable: + if reachable: # type: ignore[possibly-undefined] stack.flush(out) out.emit("DISPATCH();\n") out.start_line() From 4f8fa378263396228c7a91831bc27a526566861b Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 4 Apr 2025 16:56:23 +0100 Subject: [PATCH 10/10] Apply suggestions from code review Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com> --- Python/bytecodes.c | 2 +- Python/stackrefs.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Python/bytecodes.c b/Python/bytecodes.c index e6184f1aa0afd0..a6cdc089d7a851 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -3172,7 +3172,7 @@ dummy_func( #ifdef Py_GIL_DISABLED assert(_PyObject_IsUniquelyReferenced(iter_o)); assert(_Py_IsOwnedByCurrentThread((PyObject *)seq) || - _PyObject_GC_IS_SHARED(seq)); + _PyObject_GC_IS_SHARED(seq)); STAT_INC(FOR_ITER, hit); int result = _PyList_GetItemRefNoLock(seq, it->it_index, &next); // A negative result means we lost a race with another thread diff --git a/Python/stackrefs.c b/Python/stackrefs.c index 389b309aaea3e1..1a2f66feb04c4d 100644 --- a/Python/stackrefs.c +++ b/Python/stackrefs.c @@ -72,7 +72,7 @@ _Py_stackref_close(_PyStackRef ref, const char *filename, int linenumber) PyObject *obj; if (ref.index <= LAST_PREDEFINED_STACKREF_INDEX) { if (ref.index == 0) { - _Py_FatalErrorFormat(__func__, "Passing NULL to PyStackRef_CLOSE at %s:%d\n",filename, linenumber); + _Py_FatalErrorFormat(__func__, "Passing NULL to PyStackRef_CLOSE at %s:%d\n", filename, linenumber); } // Pre-allocated reference to None, False or True -- Do not clear TableEntry *entry = _Py_hashtable_get(interp->open_stackrefs_table, (void *)ref.index);