summaryrefslogtreecommitdiffstats
path: root/Python/generated_cases.c.h
diff options
context:
space:
mode:
authorBrandt Bucher <brandtbucher@microsoft.com>2025-04-18 14:16:28 (GMT)
committerGitHub <noreply@github.com>2025-04-18 14:16:28 (GMT)
commit40ae88988c61638ee8625e5c0ee73606ede307bb (patch)
tree82339d2ea14f3d89c71da98f5426eb9ffe9a2472 /Python/generated_cases.c.h
parenta594008d9e6c4d37ff6fd698395cd318d7ec3300 (diff)
downloadcpython-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.h748
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;