diff options
author | Brandt Bucher <brandtbucher@microsoft.com> | 2025-04-18 14:16:28 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-18 14:16:28 (GMT) |
commit | 40ae88988c61638ee8625e5c0ee73606ede307bb (patch) | |
tree | 82339d2ea14f3d89c71da98f5426eb9ffe9a2472 /Python/generated_cases.c.h | |
parent | a594008d9e6c4d37ff6fd698395cd318d7ec3300 (diff) | |
download | cpython-40ae88988c61638ee8625e5c0ee73606ede307bb.zip cpython-40ae88988c61638ee8625e5c0ee73606ede307bb.tar.gz cpython-40ae88988c61638ee8625e5c0ee73606ede307bb.tar.bz2 |
GH-131498: Replace single-element arrays with scalars in bytecodes.c (GH-132615)
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r-- | Python/generated_cases.c.h | 748 |
1 files changed, 404 insertions, 344 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 51845eb..cc85405 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -1350,21 +1350,21 @@ _Py_CODEUNIT* const this_instr = next_instr - 4; (void)this_instr; opcode = CALL; - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; // _SPECIALIZE_CALL { - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-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; _PyFrame_SetStackPointer(frame, stack_pointer); - _Py_Specialize_Call(callable[0], next_instr, oparg + !PyStackRef_IsNull(self_or_null[0])); + _Py_Specialize_Call(callable, next_instr, oparg + !PyStackRef_IsNull(self_or_null)); stack_pointer = _PyFrame_GetStackPointer(frame); DISPATCH_SAME_OPARG(); } @@ -1375,15 +1375,15 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD { - 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]); + if (PyStackRef_TYPE(callable) == &PyMethod_Type && PyStackRef_IsNull(self_or_null)) { + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *self = ((PyMethodObject *)callable_o)->im_self; - self_or_null[0] = PyStackRef_FromPyObjectNew(self); + self_or_null = PyStackRef_FromPyObjectNew(self); PyObject *method = ((PyMethodObject *)callable_o)->im_func; - _PyStackRef temp = callable[0]; - callable[0] = PyStackRef_FromPyObjectNew(method); + _PyStackRef temp = callable; + callable = PyStackRef_FromPyObjectNew(method); + stack_pointer[-2 - oparg] = callable; + stack_pointer[-1 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1392,10 +1392,10 @@ // _DO_CALL { args = &stack_pointer[-oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -1405,9 +1405,11 @@ { 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[-2 - oparg] = callable; + stack_pointer[-1 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( - tstate, callable[0], locals, + tstate, callable, locals, arguments, total_args, NULL, frame ); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1426,19 +1428,25 @@ for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; args[_i] = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); JUMP_TO_LABEL(error); } + stack_pointer[-2 - oparg] = callable; + stack_pointer[-1 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall( callable_o, args_o, @@ -1477,11 +1485,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -1525,11 +1535,11 @@ next_instr += 4; INSTRUCTION_STATS(CALL_ALLOC_AND_ENTER_INIT); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; + _PyStackRef init; + _PyStackRef self; _PyStackRef *args; - _PyStackRef *init; - _PyStackRef *self; _PyInterpreterFrame *init_frame; _PyInterpreterFrame *new_frame; /* Skip 1 cache entry */ @@ -1543,13 +1553,11 @@ } // _CHECK_AND_ALLOCATE_OBJECT { - args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-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])) { + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); + if (!PyStackRef_IsNull(self_or_null)) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1583,15 +1591,18 @@ if (self_o == NULL) { JUMP_TO_LABEL(error); } - self_or_null[0] = PyStackRef_FromPyObjectSteal(self_o); - _PyStackRef temp = callable[0]; - callable[0] = PyStackRef_FromPyObjectNew(init_func); + self_or_null = PyStackRef_FromPyObjectSteal(self_o); + _PyStackRef temp = callable; + callable = PyStackRef_FromPyObjectNew(init_func); + stack_pointer[-2 - oparg] = callable; + stack_pointer[-1 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); } // _CREATE_INIT_FRAME { + args = &stack_pointer[-oparg]; self = self_or_null; init = callable; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -1600,10 +1611,10 @@ 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_DUP(self); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( - tstate, init[0], NULL, args-1, oparg+1, NULL, shim); + tstate, init, NULL, args-1, oparg+1, NULL, shim); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); @@ -1645,9 +1656,9 @@ next_instr += 4; INSTRUCTION_STATS(CALL_BOUND_METHOD_EXACT_ARGS); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *null; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef null; + _PyStackRef self_or_null; _PyStackRef *args; _PyInterpreterFrame *new_frame; /* Skip 1 cache entry */ @@ -1661,14 +1672,14 @@ } // _CHECK_CALL_BOUND_METHOD_EXACT_ARGS { - null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - if (!PyStackRef_IsNull(null[0])) { + null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + if (!PyStackRef_IsNull(null)) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } - if (Py_TYPE(PyStackRef_AsPyObjectBorrow(callable[0])) != &PyMethod_Type) { + if (Py_TYPE(PyStackRef_AsPyObjectBorrow(callable)) != &PyMethod_Type) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1677,12 +1688,14 @@ // _INIT_CALL_BOUND_METHOD_EXACT_ARGS { self_or_null = null; - assert(PyStackRef_IsNull(self_or_null[0])); - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + assert(PyStackRef_IsNull(self_or_null)); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); STAT_INC(CALL, hit); - self_or_null[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self); - _PyStackRef temp = callable[0]; - callable[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func); + self_or_null = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self); + _PyStackRef temp = callable; + callable = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func); + stack_pointer[-2 - oparg] = callable; + stack_pointer[-1 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1691,7 +1704,7 @@ // _CHECK_FUNCTION_VERSION { uint32_t func_version = read_u32(&this_instr[2].cache); - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -1706,11 +1719,11 @@ } // _CHECK_FUNCTION_EXACT_ARGS { - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); 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]))) { + if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null))) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1718,7 +1731,7 @@ } // _CHECK_STACK_SPACE { - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { @@ -1735,11 +1748,11 @@ // _INIT_CALL_PY_EXACT_ARGS { args = &stack_pointer[-oparg]; - int has_self = !PyStackRef_IsNull(self_or_null[0]); + int has_self = !PyStackRef_IsNull(self_or_null); STAT_INC(CALL, hit); - new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); + new_frame = _PyFrame_PushUnchecked(tstate, callable, oparg + has_self, frame); _PyStackRef *first_non_self_local = new_frame->localsplus + has_self; - new_frame->localsplus[0] = self_or_null[0]; + new_frame->localsplus[0] = self_or_null; for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } @@ -1782,9 +1795,9 @@ next_instr += 4; INSTRUCTION_STATS(CALL_BOUND_METHOD_GENERAL); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *null; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef null; + _PyStackRef self_or_null; _PyStackRef *args; _PyInterpreterFrame *new_frame; /* Skip 1 cache entry */ @@ -1798,10 +1811,10 @@ } // _CHECK_METHOD_VERSION { - null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; + null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; uint32_t func_version = read_u32(&this_instr[2].cache); - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (Py_TYPE(callable_o) != &PyMethod_Type) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -1818,7 +1831,7 @@ assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); } - if (!PyStackRef_IsNull(null[0])) { + if (!PyStackRef_IsNull(null)) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -1827,13 +1840,15 @@ // _EXPAND_METHOD { self_or_null = null; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); - assert(PyStackRef_IsNull(self_or_null[0])); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); + assert(PyStackRef_IsNull(self_or_null)); assert(Py_TYPE(callable_o) == &PyMethod_Type); - self_or_null[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self); - _PyStackRef temp = callable[0]; - callable[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func); - assert(PyStackRef_FunctionCheck(callable[0])); + self_or_null = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self); + _PyStackRef temp = callable; + callable = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func); + assert(PyStackRef_FunctionCheck(callable)); + stack_pointer[-2 - oparg] = callable; + stack_pointer[-1 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1842,9 +1857,9 @@ // _PY_FRAME_GENERAL { args = &stack_pointer[-oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { args--; total_args++; } @@ -1853,7 +1868,7 @@ PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( - tstate, callable[0], locals, + tstate, callable, locals, args, total_args, NULL, frame ); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1900,8 +1915,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_BUILTIN_CLASS); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ @@ -1909,9 +1924,9 @@ // _CALL_BUILTIN_CLASS { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyType_Check(callable_o)) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -1920,7 +1935,7 @@ PyTypeObject *tp = (PyTypeObject *)callable_o; int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -1939,11 +1954,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -1961,11 +1978,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -2009,8 +2028,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_BUILTIN_FAST); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ @@ -2018,12 +2037,12 @@ // _CALL_BUILTIN_FAST { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -2048,11 +2067,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -2074,11 +2095,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -2122,8 +2145,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_BUILTIN_FAST_WITH_KEYWORDS); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ @@ -2131,12 +2154,12 @@ // _CALL_BUILTIN_FAST_WITH_KEYWORDS { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -2164,11 +2187,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -2187,11 +2212,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -2235,8 +2262,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_BUILTIN_O); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ @@ -2244,11 +2271,11 @@ // _CALL_BUILTIN_O { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { args--; total_args++; } @@ -2286,7 +2313,7 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(callable[0]); + PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { JUMP_TO_LABEL(error); @@ -2572,18 +2599,18 @@ INSTRUCTION_STATS(CALL_ISINSTANCE); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); _PyStackRef callable; - _PyStackRef *self_or_null; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; + self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -2619,8 +2646,9 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1 - oparg; @@ -2640,24 +2668,22 @@ _Py_CODEUNIT* const this_instr = next_instr - 4; (void)this_instr; opcode = CALL_KW; - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; - _PyStackRef kwnames_in; - _PyStackRef kwnames_out; _PyStackRef kwnames; _PyStackRef res; // _SPECIALIZE_CALL_KW { - self_or_null = &stack_pointer[-2 - oparg]; - callable = &stack_pointer[-3 - oparg]; + self_or_null = stack_pointer[-2 - oparg]; + callable = stack_pointer[-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; _PyFrame_SetStackPointer(frame, stack_pointer); - _Py_Specialize_CallKw(callable[0], next_instr, oparg + !PyStackRef_IsNull(self_or_null[0])); + _Py_Specialize_CallKw(callable, next_instr, oparg + !PyStackRef_IsNull(self_or_null)); stack_pointer = _PyFrame_GetStackPointer(frame); DISPATCH_SAME_OPARG(); } @@ -2668,31 +2694,29 @@ /* Skip 2 cache entries */ // _MAYBE_EXPAND_METHOD_KW { - 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]); + if (PyStackRef_TYPE(callable) == &PyMethod_Type && PyStackRef_IsNull(self_or_null)) { + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *self = ((PyMethodObject *)callable_o)->im_self; - self_or_null[0] = PyStackRef_FromPyObjectNew(self); + self_or_null = PyStackRef_FromPyObjectNew(self); PyObject *method = ((PyMethodObject *)callable_o)->im_func; - _PyStackRef temp = callable[0]; - callable[0] = PyStackRef_FromPyObjectNew(method); + _PyStackRef temp = callable; + callable = PyStackRef_FromPyObjectNew(method); + stack_pointer[-3 - oparg] = callable; + stack_pointer[-2 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); } - kwnames_out = kwnames_in; } // _DO_CALL_KW { - kwnames = kwnames_out; + kwnames = stack_pointer[-1]; args = &stack_pointer[-1 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -2703,10 +2727,11 @@ { 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; + stack_pointer[-3 - oparg] = callable; + stack_pointer[-2 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( - tstate, callable[0], locals, + tstate, callable, locals, arguments, positional_args, kwnames_o, frame ); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2727,6 +2752,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; + stack_pointer[-3 - oparg] = callable; + stack_pointer[-2 - oparg] = self_or_null; stack_pointer[-1] = kwnames; PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { @@ -2734,18 +2761,21 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-2 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-3 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); JUMP_TO_LABEL(error); } - stack_pointer[-1] = kwnames; + stack_pointer[-3 - oparg] = callable; + stack_pointer[-2 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall( callable_o, args_o, @@ -2786,11 +2816,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-2 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-3 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; @@ -2817,9 +2849,9 @@ next_instr += 4; INSTRUCTION_STATS(CALL_KW_BOUND_METHOD); static_assert(INLINE_CACHE_ENTRIES_CALL_KW == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *null; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef null; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef kwnames; _PyInterpreterFrame *new_frame; @@ -2834,10 +2866,10 @@ } // _CHECK_METHOD_VERSION_KW { - null = &stack_pointer[-2 - oparg]; - callable = &stack_pointer[-3 - oparg]; + null = stack_pointer[-2 - oparg]; + callable = stack_pointer[-3 - oparg]; uint32_t func_version = read_u32(&this_instr[2].cache); - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (Py_TYPE(callable_o) != &PyMethod_Type) { UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); @@ -2854,7 +2886,7 @@ assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); } - if (!PyStackRef_IsNull(null[0])) { + if (!PyStackRef_IsNull(null)) { UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); JUMP_TO_PREDICTED(CALL_KW); @@ -2863,13 +2895,15 @@ // _EXPAND_METHOD_KW { self_or_null = null; - assert(PyStackRef_IsNull(self_or_null[0])); - _PyStackRef callable_s = callable[0]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable_s); + assert(PyStackRef_IsNull(self_or_null)); + _PyStackRef callable_s = callable; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); assert(Py_TYPE(callable_o) == &PyMethod_Type); - 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])); + self_or_null = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self); + callable = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func); + assert(PyStackRef_FunctionCheck(callable)); + stack_pointer[-3 - oparg] = callable; + stack_pointer[-2 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable_s); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2879,10 +2913,10 @@ { kwnames = stack_pointer[-1]; args = &stack_pointer[-1 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -2893,7 +2927,7 @@ PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( - tstate, callable[0], locals, + tstate, callable, locals, arguments, positional_args, kwnames_o, frame ); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2946,8 +2980,8 @@ INSTRUCTION_STATS(CALL_KW_NON_PY); opcode = CALL_KW_NON_PY; static_assert(INLINE_CACHE_ENTRIES_CALL_KW == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef kwnames; _PyStackRef res; @@ -2955,8 +2989,8 @@ /* Skip 2 cache entries */ // _CHECK_IS_NOT_PY_CALLABLE_KW { - callable = &stack_pointer[-3 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + callable = stack_pointer[-3 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (PyFunction_Check(callable_o)) { UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); @@ -2972,14 +3006,14 @@ { kwnames = stack_pointer[-1]; args = &stack_pointer[-1 - oparg]; - self_or_null = &stack_pointer[-2 - oparg]; + self_or_null = stack_pointer[-2 - oparg]; #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -2995,11 +3029,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-2 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-3 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; @@ -3028,11 +3064,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -3076,8 +3114,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_KW_PY); static_assert(INLINE_CACHE_ENTRIES_CALL_KW == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef kwnames; _PyInterpreterFrame *new_frame; @@ -3092,9 +3130,9 @@ } // _CHECK_FUNCTION_VERSION_KW { - callable = &stack_pointer[-3 - oparg]; + callable = stack_pointer[-3 - oparg]; uint32_t func_version = read_u32(&this_instr[2].cache); - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { UPDATE_MISS_STATS(CALL_KW); assert(_PyOpcode_Deopt[opcode] == (CALL_KW)); @@ -3111,11 +3149,11 @@ { kwnames = stack_pointer[-1]; args = &stack_pointer[-1 - oparg]; - self_or_null = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -3126,7 +3164,7 @@ PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( - tstate, callable[0], locals, + tstate, callable, locals, arguments, positional_args, kwnames_o, frame ); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3178,18 +3216,18 @@ next_instr += 4; INSTRUCTION_STATS(CALL_LEN); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { args--; total_args++; } @@ -3224,7 +3262,7 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(callable[0]); + PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); stack_pointer[0] = res; @@ -3311,8 +3349,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_METHOD_DESCRIPTOR_FAST); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ @@ -3320,12 +3358,12 @@ // _CALL_METHOD_DESCRIPTOR_FAST { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -3364,11 +3402,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -3388,11 +3428,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -3436,8 +3478,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ @@ -3445,12 +3487,12 @@ // _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -3490,11 +3532,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -3515,11 +3559,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -3563,8 +3609,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_METHOD_DESCRIPTOR_NOARGS); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ @@ -3572,12 +3618,12 @@ // _CALL_METHOD_DESCRIPTOR_NOARGS { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; assert(oparg == 0 || oparg == 1); - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { args--; total_args++; } @@ -3623,7 +3669,7 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(callable[0]); + PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { JUMP_TO_LABEL(error); @@ -3664,8 +3710,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_METHOD_DESCRIPTOR_O); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ @@ -3673,12 +3719,12 @@ // _CALL_METHOD_DESCRIPTOR_O { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -3728,11 +3774,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -3777,16 +3825,16 @@ INSTRUCTION_STATS(CALL_NON_PY_GENERAL); opcode = CALL_NON_PY_GENERAL; static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyStackRef res; /* Skip 1 cache entry */ /* Skip 2 cache entries */ // _CHECK_IS_NOT_PY_CALLABLE { - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (PyFunction_Check(callable_o)) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -3801,14 +3849,14 @@ // _CALL_NON_PY_GENERAL { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; + self_or_null = stack_pointer[-1 - oparg]; #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -3821,11 +3869,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -3847,11 +3897,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -3895,8 +3947,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_PY_EXACT_ARGS); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyInterpreterFrame *new_frame; /* Skip 1 cache entry */ @@ -3910,9 +3962,9 @@ } // _CHECK_FUNCTION_VERSION { - callable = &stack_pointer[-2 - oparg]; + callable = stack_pointer[-2 - oparg]; uint32_t func_version = read_u32(&this_instr[2].cache); - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -3927,12 +3979,12 @@ } // _CHECK_FUNCTION_EXACT_ARGS { - self_or_null = &stack_pointer[-1 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); 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]))) { + if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null))) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); JUMP_TO_PREDICTED(CALL); @@ -3940,7 +3992,7 @@ } // _CHECK_STACK_SPACE { - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { @@ -3957,12 +4009,11 @@ // _INIT_CALL_PY_EXACT_ARGS { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - int has_self = !PyStackRef_IsNull(self_or_null[0]); + int has_self = !PyStackRef_IsNull(self_or_null); STAT_INC(CALL, hit); - new_frame = _PyFrame_PushUnchecked(tstate, callable[0], oparg + has_self, frame); + new_frame = _PyFrame_PushUnchecked(tstate, callable, oparg + has_self, frame); _PyStackRef *first_non_self_local = new_frame->localsplus + has_self; - new_frame->localsplus[0] = self_or_null[0]; + new_frame->localsplus[0] = self_or_null; for (int i = 0; i < oparg; i++) { first_non_self_local[i] = args[i]; } @@ -4005,8 +4056,8 @@ next_instr += 4; INSTRUCTION_STATS(CALL_PY_GENERAL); static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size"); - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; _PyInterpreterFrame *new_frame; /* Skip 1 cache entry */ @@ -4020,9 +4071,9 @@ } // _CHECK_FUNCTION_VERSION { - callable = &stack_pointer[-2 - oparg]; + callable = stack_pointer[-2 - oparg]; uint32_t func_version = read_u32(&this_instr[2].cache); - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { UPDATE_MISS_STATS(CALL); assert(_PyOpcode_Deopt[opcode] == (CALL)); @@ -4038,10 +4089,10 @@ // _PY_FRAME_GENERAL { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { args--; total_args++; } @@ -4050,7 +4101,7 @@ PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( - tstate, callable[0], locals, + tstate, callable, locals, args, total_args, NULL, frame ); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5262,7 +5313,6 @@ _PyStackRef val; value = stack_pointer[-1]; receiver = stack_pointer[-2]; - (void)receiver; val = value; stack_pointer[-2] = val; stack_pointer += -1; @@ -6084,26 +6134,26 @@ next_instr += 4; INSTRUCTION_STATS(INSTRUMENTED_CALL); opcode = INSTRUMENTED_CALL; - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; + _PyStackRef func; + _PyStackRef maybe_self; _PyStackRef *args; - _PyStackRef *func; - _PyStackRef *maybe_self; _PyStackRef res; /* Skip 3 cache entries */ // _MAYBE_EXPAND_METHOD { - args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - (void)args; - if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + if (PyStackRef_TYPE(callable) == &PyMethod_Type && PyStackRef_IsNull(self_or_null)) { + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *self = ((PyMethodObject *)callable_o)->im_self; - self_or_null[0] = PyStackRef_FromPyObjectNew(self); + self_or_null = PyStackRef_FromPyObjectNew(self); PyObject *method = ((PyMethodObject *)callable_o)->im_func; - _PyStackRef temp = callable[0]; - callable[0] = PyStackRef_FromPyObjectNew(method); + _PyStackRef temp = callable; + callable = PyStackRef_FromPyObjectNew(method); + stack_pointer[-2 - oparg] = callable; + stack_pointer[-1 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6111,13 +6161,14 @@ } // _MONITOR_CALL { + args = &stack_pointer[-oparg]; maybe_self = self_or_null; func = callable; - int is_meth = !PyStackRef_IsNull(maybe_self[0]); - PyObject *function = PyStackRef_AsPyObjectBorrow(func[0]); + int is_meth = !PyStackRef_IsNull(maybe_self); + PyObject *function = PyStackRef_AsPyObjectBorrow(func); PyObject *arg0; if (is_meth) { - arg0 = PyStackRef_AsPyObjectBorrow(maybe_self[0]); + arg0 = PyStackRef_AsPyObjectBorrow(maybe_self); } else if (oparg) { arg0 = PyStackRef_AsPyObjectBorrow(args[0]); @@ -6125,6 +6176,8 @@ else { arg0 = &_PyInstrumentation_MISSING; } + stack_pointer[-2 - oparg] = func; + stack_pointer[-1 - oparg] = maybe_self; _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -6138,12 +6191,12 @@ // _DO_CALL { args = &stack_pointer[-oparg]; - self_or_null = &stack_pointer[-1 - oparg]; - callable = &stack_pointer[-2 - oparg]; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -6155,7 +6208,7 @@ PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( - tstate, callable[0], locals, + tstate, callable, locals, arguments, total_args, NULL, frame ); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6176,11 +6229,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -6225,11 +6280,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; @@ -6448,41 +6505,38 @@ next_instr += 4; INSTRUCTION_STATS(INSTRUMENTED_CALL_KW); opcode = INSTRUMENTED_CALL_KW; - _PyStackRef *callable; - _PyStackRef *self_or_null; + _PyStackRef callable; + _PyStackRef self_or_null; _PyStackRef *args; - _PyStackRef kwnames_in; - _PyStackRef kwnames_out; _PyStackRef kwnames; _PyStackRef res; /* Skip 1 cache entry */ /* 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]; - (void)args; - if (PyStackRef_TYPE(callable[0]) == &PyMethod_Type && PyStackRef_IsNull(self_or_null[0])) { - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + self_or_null = stack_pointer[-2 - oparg]; + callable = stack_pointer[-3 - oparg]; + if (PyStackRef_TYPE(callable) == &PyMethod_Type && PyStackRef_IsNull(self_or_null)) { + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *self = ((PyMethodObject *)callable_o)->im_self; - self_or_null[0] = PyStackRef_FromPyObjectNew(self); + self_or_null = PyStackRef_FromPyObjectNew(self); PyObject *method = ((PyMethodObject *)callable_o)->im_func; - _PyStackRef temp = callable[0]; - callable[0] = PyStackRef_FromPyObjectNew(method); + _PyStackRef temp = callable; + callable = PyStackRef_FromPyObjectNew(method); + stack_pointer[-3 - oparg] = callable; + stack_pointer[-2 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); } - kwnames_out = kwnames_in; } // _MONITOR_CALL_KW { - int is_meth = !PyStackRef_IsNull(self_or_null[0]); + args = &stack_pointer[-1 - oparg]; + int is_meth = !PyStackRef_IsNull(self_or_null); PyObject *arg; if (is_meth) { - arg = PyStackRef_AsPyObjectBorrow(self_or_null[0]); + arg = PyStackRef_AsPyObjectBorrow(self_or_null); } else if (args) { arg = PyStackRef_AsPyObjectBorrow(args[0]); @@ -6490,8 +6544,9 @@ else { arg = &_PyInstrumentation_MISSING; } - PyObject *function = PyStackRef_AsPyObjectBorrow(callable[0]); - stack_pointer[-1] = kwnames_out; + PyObject *function = PyStackRef_AsPyObjectBorrow(callable); + stack_pointer[-3 - oparg] = callable; + stack_pointer[-2 - oparg] = self_or_null; _PyFrame_SetStackPointer(frame, stack_pointer); int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, @@ -6503,12 +6558,13 @@ } // _DO_CALL_KW { - kwnames = kwnames_out; - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]); + kwnames = stack_pointer[-1]; + args = &stack_pointer[-1 - oparg]; + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); int total_args = oparg; _PyStackRef *arguments = args; - if (!PyStackRef_IsNull(self_or_null[0])) { + if (!PyStackRef_IsNull(self_or_null)) { arguments--; total_args++; } @@ -6521,7 +6577,7 @@ PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( - tstate, callable[0], locals, + tstate, callable, locals, arguments, positional_args, kwnames_o, frame ); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6549,11 +6605,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-2 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-3 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; @@ -6600,11 +6658,13 @@ args[_i] = PyStackRef_NULL; PyStackRef_CLOSE(tmp); } - tmp = self_or_null[0]; - self_or_null[0] = PyStackRef_NULL; + tmp = self_or_null; + self_or_null = PyStackRef_NULL; + stack_pointer[-2 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); - tmp = callable[0]; - callable[0] = PyStackRef_NULL; + tmp = callable; + callable = PyStackRef_NULL; + stack_pointer[-3 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -3 - oparg; |