aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/generated_cases.c.h
diff options
context:
space:
mode:
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r--Python/generated_cases.c.h879
1 files changed, 595 insertions, 284 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 38ea63d71ab..44a78c41048 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -57,7 +57,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(lhs);
PyStackRef_CLOSE(rhs);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -95,7 +97,9 @@
((PyFloatObject *)left_o)->ob_fval +
((PyFloatObject *)right_o)->ob_fval;
PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -132,7 +136,9 @@
PyObject *res_o = _PyLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o);
PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc);
PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -169,7 +175,9 @@
PyObject *res_o = PyUnicode_Concat(left_o, right_o);
PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc);
PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -275,7 +283,9 @@
PyUnicode_Append(&temp, right_o);
*target_local = PyStackRef_FromPyObjectSteal(temp);
PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc);
- if (PyStackRef_IsNull(*target_local)) goto pop_2_error;
+ if (PyStackRef_IsNull(*target_local)) {
+ goto pop_2_error;
+ }
#if TIER_ONE
// The STORE_FAST is already done. This is done here in tier one,
// and during trace projection in tier two:
@@ -317,7 +327,9 @@
((PyFloatObject *)left_o)->ob_fval *
((PyFloatObject *)right_o)->ob_fval;
PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -354,7 +366,9 @@
PyObject *res_o = _PyLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o);
PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc);
PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -392,7 +406,9 @@
((PyFloatObject *)left_o)->ob_fval -
((PyFloatObject *)right_o)->ob_fval;
PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -429,7 +445,9 @@
PyObject *res_o = _PyLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o);
PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc);
PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -478,12 +496,18 @@
stack_pointer += 2;
assert(WITHIN_STACK_BOUNDS());
}
+ stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(container);
- if (res_o == NULL) goto pop_3_error;
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ if (res_o == NULL) {
+ goto error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
- stack_pointer[-3] = res;
- stack_pointer += -2;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -526,7 +550,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(container);
PyStackRef_CLOSE(sub);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -561,7 +587,9 @@
}
PyStackRef_CLOSE(dict_st);
PyStackRef_CLOSE(sub_st);
- if (rc <= 0) goto pop_2_error;
+ if (rc <= 0) {
+ goto pop_2_error;
+ }
// not found or error
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-2] = res;
@@ -661,10 +689,14 @@
Py_INCREF(res_o);
#endif
PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc);
+ stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(list_st);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
res = PyStackRef_FromPyObjectSteal(res_o);
- stack_pointer[-2] = res;
- stack_pointer += -1;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -693,10 +725,14 @@
STAT_INC(BINARY_SUBSCR, hit);
PyObject *res_o = (PyObject*)&_Py_SINGLETON(strings).ascii[c];
PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc);
+ stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(str_st);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
res = PyStackRef_FromPyObjectSteal(res_o);
- stack_pointer[-2] = res;
- stack_pointer += -1;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -725,10 +761,14 @@
assert(res_o != NULL);
Py_INCREF(res_o);
PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc);
+ stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(tuple_st);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
res = PyStackRef_FromPyObjectSteal(res_o);
- stack_pointer[-2] = res;
- stack_pointer += -1;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -763,11 +803,9 @@
for (int _i = oparg*2; --_i >= 0;) {
PyStackRef_CLOSE(values[_i]);
}
- {
- stack_pointer += -oparg*2;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -oparg*2;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *map_o = _PyDict_FromItems(
@@ -805,11 +843,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(values[_i]);
}
- {
- stack_pointer += -oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
int err = 0;
for (int i = 0; i < oparg; i++) {
@@ -875,11 +911,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(pieces[_i]);
}
- {
- stack_pointer += -oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
PyObject *str_o = _PyUnicode_JoinArray(&_Py_STR(empty), pieces_o, oparg);
STACKREFS_TO_PYOBJECTS_CLEANUP(pieces_o);
@@ -969,7 +1003,9 @@
PyObject *method = ((PyMethodObject *)callable_o)->im_func;
_PyStackRef temp = callable[0];
func[0] = PyStackRef_FromPyObjectNew(method);
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(temp);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
}
// _DO_CALL
@@ -1017,11 +1053,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(args[_i]);
}
- {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = PyObject_Vectorcall(
@@ -1075,7 +1109,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
@@ -1134,7 +1170,9 @@
self[0] = PyStackRef_FromPyObjectSteal(self_o);
_PyStackRef temp = callable[0];
init[0] = PyStackRef_FromPyObjectNew(init_func);
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(temp);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
// _CREATE_INIT_FRAME
{
@@ -1193,8 +1231,6 @@
static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
_PyStackRef *callable;
_PyStackRef *null;
- _PyStackRef *func;
- _PyStackRef *self;
_PyStackRef *self_or_null;
_PyStackRef *args;
_PyInterpreterFrame *new_frame;
@@ -1212,19 +1248,20 @@
}
// _INIT_CALL_BOUND_METHOD_EXACT_ARGS
{
- func = &stack_pointer[-2 - oparg];
- self = &stack_pointer[-1 - oparg];
+ self_or_null = null;
+ assert(PyStackRef_IsNull(self_or_null[0]));
PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]);
STAT_INC(CALL, hit);
- self[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self);
+ self_or_null[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self);
_PyStackRef temp = callable[0];
- func[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func);
+ callable[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func);
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(temp);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
// flush
// _CHECK_FUNCTION_VERSION
{
- callable = &stack_pointer[-2 - oparg];
uint32_t func_version = read_u32(&this_instr[2].cache);
PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]);
DEOPT_IF(!PyFunction_Check(callable_o), CALL);
@@ -1233,7 +1270,6 @@
}
// _CHECK_FUNCTION_EXACT_ARGS
{
- self_or_null = &stack_pointer[-1 - oparg];
PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]);
assert(PyFunction_Check(callable_o));
PyFunctionObject *func = (PyFunctionObject *)callable_o;
@@ -1297,8 +1333,6 @@
static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
_PyStackRef *callable;
_PyStackRef *null;
- _PyStackRef *method;
- _PyStackRef *self;
_PyStackRef *self_or_null;
_PyStackRef *args;
_PyInterpreterFrame *new_frame;
@@ -1321,23 +1355,22 @@
}
// _EXPAND_METHOD
{
- method = &stack_pointer[-2 - oparg];
- self = &stack_pointer[-1 - oparg];
+ self_or_null = null;
PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]);
- assert(PyStackRef_IsNull(null[0]));
+ assert(PyStackRef_IsNull(self_or_null[0]));
assert(Py_TYPE(callable_o) == &PyMethod_Type);
- self[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self);
+ self_or_null[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self);
_PyStackRef temp = callable[0];
- method[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func);
- assert(PyStackRef_FunctionCheck(method[0]));
+ callable[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func);
+ assert(PyStackRef_FunctionCheck(callable[0]));
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(temp);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
// flush
// _PY_FRAME_GENERAL
{
args = &stack_pointer[-oparg];
- self_or_null = &stack_pointer[-1 - oparg];
- callable = &stack_pointer[-2 - oparg];
PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]);
// oparg counts all of the args, but *not* self:
int total_args = oparg;
@@ -1423,11 +1456,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(args[_i]);
}
- {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = tp->tp_vectorcall((PyObject *)tp, args_o, total_args, NULL);
@@ -1456,7 +1487,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
@@ -1503,11 +1536,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(args[_i]);
}
- {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = ((PyCFunctionFast)(void(*)(void))cfunc)(
@@ -1540,7 +1571,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
@@ -1591,11 +1624,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(args[_i]);
}
- {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = cfunc(PyCFunction_GET_SELF(callable_o), args_o, total_args, NULL);
@@ -1625,7 +1656,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
@@ -1673,11 +1706,15 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
_Py_LeaveRecursiveCallTstate(tstate);
assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(arg);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(callable[0]);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
if (res_o == NULL) {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
goto error;
}
res = PyStackRef_FromPyObjectSteal(res_o);
@@ -1687,19 +1724,21 @@
_Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY();
QSBR_QUIESCENT_STATE(tstate);
if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
- stack_pointer[-2 - oparg] = res;
- stack_pointer += -1 - oparg;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
- stack_pointer += 1 + oparg;
+ if (err != 0) {
+ goto error;
+ }
+ stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
}
}
- stack_pointer[-2 - oparg] = res;
- stack_pointer += -1 - oparg;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -1717,6 +1756,7 @@
_PyStackRef tuple;
_PyStackRef kwargs_out;
_PyStackRef func_st;
+ _PyStackRef null;
_PyStackRef callargs_st;
_PyStackRef kwargs_st;
_PyStackRef result;
@@ -1744,15 +1784,23 @@
goto error;
}
kwargs_out = kwargs_in;
+ stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(callargs);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
tuple = PyStackRef_FromPyObjectSteal(tuple_o);
+ stack_pointer += 2;
+ assert(WITHIN_STACK_BOUNDS());
}
}
// _DO_CALL_FUNCTION_EX
{
kwargs_st = kwargs_out;
callargs_st = tuple;
+ null = stack_pointer[-3];
func_st = func;
+ (void)null;
PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
// DICT_MERGE is called before this opcode if there are kwargs.
// It converts all dict subtypes in kwargs into regular dicts.
@@ -1810,7 +1858,7 @@
Py_ssize_t nargs = PyTuple_GET_SIZE(callargs);
int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags;
PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
- stack_pointer += -3;
+ stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
_PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex(
@@ -1818,7 +1866,7 @@
nargs, callargs, kwargs, frame);
stack_pointer = _PyFrame_GetStackPointer(frame);
// Need to sync the stack since we exit with DISPATCH_INLINED.
- stack_pointer += -1;
+ stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
if (new_frame == NULL) {
goto error;
@@ -1837,12 +1885,24 @@
result_o = PyObject_Call(func, callargs, kwargs);
stack_pointer = _PyFrame_GetStackPointer(frame);
}
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_XCLOSE(kwargs_st);
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(callargs_st);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(func_st);
- if (result_o == NULL) goto pop_4_error;
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ if (result_o == NULL) {
+ goto error;
+ }
result = PyStackRef_FromPyObjectSteal(result_o);
}
// _CHECK_PERIODIC
@@ -1850,19 +1910,21 @@
_Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY();
QSBR_QUIESCENT_STATE(tstate);
if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
- stack_pointer[-4] = result;
- stack_pointer += -3;
+ stack_pointer[0] = result;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
- stack_pointer += 3;
+ if (err != 0) {
+ goto error;
+ }
+ stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
}
}
- stack_pointer[-4] = result;
- stack_pointer += -3;
+ stack_pointer[0] = result;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -1879,7 +1941,9 @@
PyObject *res_o = _PyIntrinsics_UnaryFunctions[oparg].func(tstate, PyStackRef_AsPyObjectBorrow(value));
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(value);
- if (res_o == NULL) goto pop_1_error;
+ if (res_o == NULL) {
+ goto pop_1_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-1] = res;
DISPATCH();
@@ -1902,7 +1966,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(value2_st);
PyStackRef_CLOSE(value1_st);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-2] = res;
stack_pointer += -1;
@@ -2005,7 +2071,9 @@
PyObject *method = ((PyMethodObject *)callable_o)->im_func;
_PyStackRef temp = callable[0];
func[0] = PyStackRef_FromPyObjectNew(method);
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(temp);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
kwnames_out = kwnames_in;
}
@@ -2039,9 +2107,13 @@
arguments, positional_args, kwnames_o, frame
);
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(kwnames);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
// Sync stack explicitly since we leave using DISPATCH_INLINED().
- stack_pointer += -3 - oparg;
+ stack_pointer += -2 - oparg;
assert(WITHIN_STACK_BOUNDS());
// The frame has stolen all the arguments from the stack,
// so there is no need to clean them up.
@@ -2061,11 +2133,9 @@
PyStackRef_CLOSE(args[_i]);
}
PyStackRef_CLOSE(kwnames);
- {
- stack_pointer += -3 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -3 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
stack_pointer[-1] = kwnames;
_PyFrame_SetStackPointer(frame, stack_pointer);
@@ -2124,8 +2194,6 @@
_PyStackRef *callable;
_PyStackRef *null;
_PyStackRef kwnames;
- _PyStackRef *method;
- _PyStackRef *self;
_PyStackRef *self_or_null;
_PyStackRef *args;
_PyInterpreterFrame *new_frame;
@@ -2148,24 +2216,23 @@
}
// _EXPAND_METHOD_KW
{
- method = &stack_pointer[-3 - oparg];
- self = &stack_pointer[-2 - oparg];
+ 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(null[0]));
assert(Py_TYPE(callable_o) == &PyMethod_Type);
- self[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self);
- method[0] = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func);
- assert(PyStackRef_FunctionCheck(method[0]));
+ 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]));
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(callable_s);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
// flush
// _PY_FRAME_KW
{
kwnames = stack_pointer[-1];
args = &stack_pointer[-1 - oparg];
- self_or_null = &stack_pointer[-2 - oparg];
- callable = &stack_pointer[-3 - oparg];
PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]);
// oparg counts all of the args, but *not* self:
int total_args = oparg;
@@ -2185,10 +2252,14 @@
arguments, positional_args, kwnames_o, frame
);
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(kwnames);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
// The frame has stolen all the arguments from the stack,
// so there is no need to clean them up.
- stack_pointer += -3 - oparg;
+ stack_pointer += -2 - oparg;
assert(WITHIN_STACK_BOUNDS());
if (temp == NULL) {
goto error;
@@ -2265,11 +2336,9 @@
PyStackRef_CLOSE(args[_i]);
}
PyStackRef_CLOSE(kwnames);
- {
- stack_pointer += -3 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -3 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames);
int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames_o);
@@ -2279,7 +2348,11 @@
positional_args | PY_VECTORCALL_ARGUMENTS_OFFSET,
kwnames_o);
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(kwnames);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
PyStackRef_CLOSE(callable[0]);
@@ -2288,7 +2361,7 @@
PyStackRef_CLOSE(args[_i]);
}
if (res_o == NULL) {
- stack_pointer += -3 - oparg;
+ stack_pointer += -2 - oparg;
assert(WITHIN_STACK_BOUNDS());
goto error;
}
@@ -2299,19 +2372,21 @@
_Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY();
QSBR_QUIESCENT_STATE(tstate);
if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
- stack_pointer[-3 - oparg] = res;
- stack_pointer += -2 - oparg;
+ stack_pointer[-2 - oparg] = res;
+ stack_pointer += -1 - oparg;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
- stack_pointer += 2 + oparg;
+ if (err != 0) {
+ goto error;
+ }
+ stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
}
- stack_pointer[-3 - oparg] = res;
- stack_pointer += -2 - oparg;
+ stack_pointer[-2 - oparg] = res;
+ stack_pointer += -1 - oparg;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -2365,10 +2440,14 @@
arguments, positional_args, kwnames_o, frame
);
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(kwnames);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
// The frame has stolen all the arguments from the stack,
// so there is no need to clean them up.
- stack_pointer += -3 - oparg;
+ stack_pointer += -2 - oparg;
assert(WITHIN_STACK_BOUNDS());
if (temp == NULL) {
goto error;
@@ -2440,11 +2519,17 @@
if (res_o == NULL) {
GOTO_ERROR(error);
}
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(arg_stackref);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(callable[0]);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
res = PyStackRef_FromPyObjectSteal(res_o);
- stack_pointer[-2 - oparg] = res;
- stack_pointer += -1 - oparg;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -2473,17 +2558,25 @@
STAT_INC(CALL, hit);
int err = _PyList_AppendTakeRef((PyListObject *)self_o, PyStackRef_AsPyObjectSteal(arg));
UNLOCK_OBJECT(self_o);
+ stack_pointer += -2;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(self);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(callable);
- if (err) goto pop_3_error;
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ if (err) {
+ goto error;
+ }
#if TIER_ONE
// Skip the following POP_TOP. This is done here in tier one, and
// during trace projection in tier two:
assert(next_instr->op.code == POP_TOP);
SKIP_OVER(1);
#endif
- stack_pointer += -3;
- assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -2526,11 +2619,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(args[_i]);
}
- {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
PyCFunctionFast cfunc =
@@ -2562,7 +2653,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
@@ -2612,11 +2705,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(args[_i]);
}
- {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
PyCFunctionFastWithKeywords cfunc =
@@ -2648,7 +2739,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
@@ -2700,11 +2793,15 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
_Py_LeaveRecursiveCallTstate(tstate);
assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(self_stackref);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(callable[0]);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
if (res_o == NULL) {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
goto error;
}
res = PyStackRef_FromPyObjectSteal(res_o);
@@ -2714,19 +2811,21 @@
_Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY();
QSBR_QUIESCENT_STATE(tstate);
if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
- stack_pointer[-2 - oparg] = res;
- stack_pointer += -1 - oparg;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
- stack_pointer += 1 + oparg;
+ if (err != 0) {
+ goto error;
+ }
+ stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
}
}
- stack_pointer[-2 - oparg] = res;
- stack_pointer += -1 - oparg;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -2749,8 +2848,9 @@
callable = &stack_pointer[-2 - oparg];
PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable[0]);
int total_args = oparg;
+ _PyStackRef *arguments = args;
if (!PyStackRef_IsNull(self_or_null[0])) {
- args--;
+ arguments--;
total_args++;
}
PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
@@ -2760,8 +2860,8 @@
DEOPT_IF(meth->ml_flags != METH_O, CALL);
// CPython promises to check all non-vectorcall function calls.
DEOPT_IF(tstate->c_recursion_remaining <= 0, CALL);
- _PyStackRef arg_stackref = args[1];
- _PyStackRef self_stackref = args[0];
+ _PyStackRef arg_stackref = arguments[1];
+ _PyStackRef self_stackref = arguments[0];
DEOPT_IF(!Py_IS_TYPE(PyStackRef_AsPyObjectBorrow(self_stackref),
method->d_common.d_type), CALL);
STAT_INC(CALL, hit);
@@ -2774,9 +2874,11 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
_Py_LeaveRecursiveCallTstate(tstate);
assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
- PyStackRef_CLOSE(self_stackref);
- PyStackRef_CLOSE(arg_stackref);
PyStackRef_CLOSE(callable[0]);
+ PyStackRef_XCLOSE(self_or_null[0]);
+ for (int _i = oparg; --_i >= 0;) {
+ PyStackRef_CLOSE(args[_i]);
+ }
if (res_o == NULL) {
stack_pointer += -2 - oparg;
assert(WITHIN_STACK_BOUNDS());
@@ -2795,7 +2897,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
@@ -2846,11 +2950,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(args[_i]);
}
- {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = PyObject_Vectorcall(
@@ -2883,7 +2985,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
@@ -3080,8 +3184,14 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = PyObject_Str(arg_o);
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(arg);
- if (res_o == NULL) goto pop_3_error;
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ if (res_o == NULL) {
+ goto error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
// _CHECK_PERIODIC
@@ -3089,19 +3199,21 @@
_Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY();
QSBR_QUIESCENT_STATE(tstate);
if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
- stack_pointer[-3] = res;
- stack_pointer += -2;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
- stack_pointer += 2;
+ if (err != 0) {
+ goto error;
+ }
+ stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
}
}
- stack_pointer[-3] = res;
- stack_pointer += -2;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -3131,8 +3243,14 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = PySequence_Tuple(arg_o);
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -3;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(arg);
- if (res_o == NULL) goto pop_3_error;
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ if (res_o == NULL) {
+ goto error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
// _CHECK_PERIODIC
@@ -3140,19 +3258,21 @@
_Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY();
QSBR_QUIESCENT_STATE(tstate);
if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
- stack_pointer[-3] = res;
- stack_pointer += -2;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
- stack_pointer += 2;
+ if (err != 0) {
+ goto error;
+ }
+ stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
}
}
- stack_pointer[-3] = res;
- stack_pointer += -2;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -3178,10 +3298,12 @@
DEOPT_IF(callable_o != (PyObject *)&PyType_Type, CALL);
STAT_INC(CALL, hit);
res = PyStackRef_FromPyObjectSteal(Py_NewRef(Py_TYPE(arg_o)));
- PyStackRef_CLOSE(arg);
stack_pointer[-3] = res;
stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
+ PyStackRef_CLOSE(arg);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
DISPATCH();
}
@@ -3213,9 +3335,13 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(exc_value_st);
PyStackRef_CLOSE(match_type_st);
- if (res < 0) goto pop_2_error;
+ if (res < 0) {
+ goto pop_2_error;
+ }
assert((match_o == NULL) == (rest_o == NULL));
- if (match_o == NULL) goto pop_2_error;
+ if (match_o == NULL) {
+ goto pop_2_error;
+ }
if (!Py_IsNone(match_o)) {
stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
@@ -3338,7 +3464,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(left);
PyStackRef_CLOSE(right);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
if (oparg & 16) {
stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
@@ -3346,7 +3474,9 @@
int res_bool = PyObject_IsTrue(res_o);
Py_DECREF(res_o);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (res_bool < 0) goto error;
+ if (res_bool < 0) {
+ goto error;
+ }
res = res_bool ? PyStackRef_True : PyStackRef_False;
}
else {
@@ -3517,7 +3647,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(left);
PyStackRef_CLOSE(right);
- if (res < 0) goto pop_2_error;
+ if (res < 0) {
+ goto pop_2_error;
+ }
b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False;
}
stack_pointer[-2] = b;
@@ -3546,7 +3678,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(left);
PyStackRef_CLOSE(right);
- if (res < 0) goto pop_2_error;
+ if (res < 0) {
+ goto pop_2_error;
+ }
b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False;
stack_pointer[-2] = b;
stack_pointer += -1;
@@ -3575,7 +3709,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(left);
PyStackRef_CLOSE(right);
- if (res < 0) goto pop_2_error;
+ if (res < 0) {
+ goto pop_2_error;
+ }
b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False;
stack_pointer[-2] = b;
stack_pointer += -1;
@@ -3596,10 +3732,18 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *result_o = conv_fn(PyStackRef_AsPyObjectBorrow(value));
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(value);
- if (result_o == NULL) goto pop_1_error;
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ if (result_o == NULL) {
+ goto error;
+ }
result = PyStackRef_FromPyObjectSteal(result_o);
- stack_pointer[-1] = result;
+ stack_pointer[0] = result;
+ stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -3647,7 +3791,9 @@
int err = PyObject_DelAttr(PyStackRef_AsPyObjectBorrow(owner), name);
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(owner);
- if (err) goto pop_1_error;
+ if (err) {
+ goto pop_1_error;
+ }
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
@@ -3757,7 +3903,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(container);
PyStackRef_CLOSE(sub);
- if (err) goto pop_2_error;
+ if (err) {
+ goto pop_2_error;
+ }
stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
@@ -3866,9 +4014,11 @@
* This has the benign side effect that if value is
* finalized it will see the location as the FOR_ITER's.
*/
- PyStackRef_CLOSE(value);
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
+ PyStackRef_CLOSE(value);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
DISPATCH();
}
@@ -3968,14 +4118,24 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = PyObject_Format(value_o, NULL);
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(value);
- if (res_o == NULL) goto pop_1_error;
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ if (res_o == NULL) {
+ goto error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
}
else {
res = value;
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
}
- stack_pointer[-1] = res;
+ stack_pointer[0] = res;
+ stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -3993,7 +4153,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(value);
PyStackRef_CLOSE(fmt_spec);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-2] = res;
stack_pointer += -1;
@@ -4196,7 +4358,9 @@
r->start = value + r->step;
r->len--;
PyObject *res = PyLong_FromLong(value);
- if (res == NULL) goto error;
+ if (res == NULL) {
+ goto error;
+ }
next = PyStackRef_FromPyObjectSteal(res);
}
stack_pointer[0] = next;
@@ -4281,7 +4445,9 @@
iter_o = (*getter)(obj_o);
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(obj);
- if (iter_o == NULL) goto pop_1_error;
+ if (iter_o == NULL) {
+ goto pop_1_error;
+ }
if (Py_TYPE(iter_o)->tp_as_async == NULL ||
Py_TYPE(iter_o)->tp_as_async->am_anext == NULL) {
stack_pointer += -1;
@@ -4331,7 +4497,9 @@
PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg);
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(iterable);
- if (iter_o == NULL) goto pop_1_error;
+ if (iter_o == NULL) {
+ goto pop_1_error;
+ }
iter = PyStackRef_FromPyObjectSteal(iter_o);
stack_pointer[-1] = iter;
DISPATCH();
@@ -4349,7 +4517,9 @@
PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable));
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(iterable);
- if (iter_o == NULL) goto pop_1_error;
+ if (iter_o == NULL) {
+ goto pop_1_error;
+ }
iter = PyStackRef_FromPyObjectSteal(iter_o);
stack_pointer[-1] = iter;
DISPATCH();
@@ -4366,9 +4536,13 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
Py_ssize_t len_i = PyObject_Length(PyStackRef_AsPyObjectBorrow(obj));
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (len_i < 0) goto error;
+ if (len_i < 0) {
+ goto error;
+ }
PyObject *len_o = PyLong_FromSsize_t(len_i);
- if (len_o == NULL) goto error;
+ if (len_o == NULL) {
+ goto error;
+ }
len = PyStackRef_FromPyObjectSteal(len_o);
stack_pointer[0] = len;
stack_pointer += 1;
@@ -4430,7 +4604,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = _PyEval_ImportFrom(tstate, PyStackRef_AsPyObjectBorrow(from), name);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (res_o == NULL) goto error;
+ if (res_o == NULL) {
+ goto error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[0] = res;
stack_pointer += 1;
@@ -4455,7 +4631,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(level);
PyStackRef_CLOSE(fromlist);
- if (res_o == NULL) goto pop_2_error;
+ if (res_o == NULL) {
+ goto pop_2_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-2] = res;
stack_pointer += -1;
@@ -4489,7 +4667,9 @@
PyObject *method = ((PyMethodObject *)callable_o)->im_func;
_PyStackRef temp = callable[0];
func[0] = PyStackRef_FromPyObjectNew(method);
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(temp);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
}
// _MONITOR_CALL
@@ -4517,7 +4697,9 @@
frame, this_instr, function, arg0
);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err) goto error;
+ if (err) {
+ goto error;
+ }
}
// _DO_CALL
{
@@ -4563,11 +4745,9 @@
for (int _i = oparg; --_i >= 0;) {
PyStackRef_CLOSE(args[_i]);
}
- {
- stack_pointer += -2 - oparg;
- assert(WITHIN_STACK_BOUNDS());
- goto error;
- }
+ stack_pointer += -2 - oparg;
+ assert(WITHIN_STACK_BOUNDS());
+ goto error;
}
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *res_o = PyObject_Vectorcall(
@@ -4621,7 +4801,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
stack_pointer += 1 + oparg;
assert(WITHIN_STACK_BOUNDS());
}
@@ -4659,7 +4841,9 @@
tstate, PY_MONITORING_EVENT_CALL,
frame, this_instr, function, arg);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err) goto error;
+ if (err) {
+ goto error;
+ }
PAUSE_ADAPTIVE_COUNTER(this_instr[1].counter);
goto PREDICTED_CALL_KW;
}
@@ -4709,10 +4893,12 @@
}
}
val = value;
- PyStackRef_CLOSE(receiver);
stack_pointer[-2] = val;
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
+ PyStackRef_CLOSE(receiver);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
DISPATCH();
}
@@ -4762,7 +4948,9 @@
int next_opcode = _Py_call_instrumentation_instruction(
tstate, frame, this_instr);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (next_opcode < 0) goto error;
+ if (next_opcode < 0) {
+ goto error;
+ }
next_instr = this_instr;
if (_PyOpcode_Caches[next_opcode]) {
PAUSE_ADAPTIVE_COUNTER(next_instr[1].counter);
@@ -4786,7 +4974,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
}
}
// _MONITOR_JUMP_BACKWARD
@@ -4875,9 +5065,11 @@
_PyStackRef iter;
iter = stack_pointer[-1];
INSTRUMENTED_JUMP(prev_instr, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT);
- PyStackRef_CLOSE(iter);
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
+ PyStackRef_CLOSE(iter);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
DISPATCH();
}
@@ -4910,7 +5102,9 @@
INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT);
}
else {
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(value_stackref);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
DISPATCH();
}
@@ -4925,7 +5119,9 @@
int jump = !PyStackRef_IsNone(value_stackref);
RECORD_BRANCH_TAKEN(this_instr[1].cache, jump);
if (jump) {
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(value_stackref);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT);
}
DISPATCH();
@@ -4961,7 +5157,9 @@
_Py_CODEUNIT *bytecode =
_PyEval_GetExecutableCode(tstate, _PyFrame_GetCode(frame));
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (bytecode == NULL) goto error;
+ if (bytecode == NULL) {
+ goto error;
+ }
_PyFrame_SetStackPointer(frame, stack_pointer);
ptrdiff_t off = this_instr - _PyFrame_GetBytecode(frame);
stack_pointer = _PyFrame_GetStackPointer(frame);
@@ -5000,7 +5198,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
}
}
}
@@ -5010,7 +5210,9 @@
int err = _Py_call_instrumentation(
tstate, oparg > 0, frame, this_instr);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err) goto error;
+ if (err) {
+ goto error;
+ }
if (frame->instr_ptr != this_instr) {
/* Instrumentation has jumped */
next_instr = frame->instr_ptr;
@@ -5035,7 +5237,9 @@
tstate, PY_MONITORING_EVENT_PY_RETURN,
frame, this_instr, PyStackRef_AsPyObjectBorrow(val));
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err) goto error;
+ if (err) {
+ goto error;
+ }
}
// _RETURN_VALUE
{
@@ -5194,7 +5398,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
}
}
// _JUMP_BACKWARD_NO_INTERRUPT
@@ -5225,7 +5431,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
}
}
// _JUMP_BACKWARD_NO_INTERRUPT
@@ -5255,7 +5463,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
if (optimized <= 0) {
this_instr[1].counter = restart_backoff_counter(counter);
- if (optimized < 0) goto error;
+ if (optimized < 0) {
+ goto error;
+ }
}
else {
_PyFrame_SetStackPointer(frame, stack_pointer);
@@ -5302,7 +5512,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
}
}
// _JUMP_BACKWARD_NO_INTERRUPT
@@ -5336,7 +5548,9 @@
list = stack_pointer[-2 - (oparg-1)];
int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list),
PyStackRef_AsPyObjectSteal(v));
- if (err < 0) goto pop_1_error;
+ if (err < 0) {
+ goto pop_1_error;
+ }
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
@@ -5435,7 +5649,9 @@
meth | NULL | arg1 | ... | argN
*/
PyStackRef_CLOSE(owner);
- if (attr_o == NULL) goto pop_1_error;
+ if (attr_o == NULL) {
+ goto pop_1_error;
+ }
self_or_null[0] = PyStackRef_NULL;
}
}
@@ -5445,7 +5661,9 @@
attr_o = PyObject_GetAttr(PyStackRef_AsPyObjectBorrow(owner), name);
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(owner);
- if (attr_o == NULL) goto pop_1_error;
+ if (attr_o == NULL) {
+ goto pop_1_error;
+ }
}
attr = PyStackRef_FromPyObjectSteal(attr_o);
}
@@ -5616,14 +5834,16 @@
attr = PyStackRef_FromPyObjectNew(attr_o);
#endif
STAT_INC(LOAD_ATTR, hit);
+ stack_pointer[-1] = attr;
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(owner);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
/* Skip 5 cache entries */
// _PUSH_NULL_CONDITIONAL
{
null = PyStackRef_NULL;
}
- stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
assert(WITHIN_STACK_BOUNDS());
@@ -5804,14 +6024,16 @@
attr = PyStackRef_FromPyObjectSteal(attr_o);
#endif
STAT_INC(LOAD_ATTR, hit);
+ stack_pointer[-1] = attr;
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(owner);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
}
/* Skip 5 cache entries */
// _PUSH_NULL_CONDITIONAL
{
null = PyStackRef_NULL;
}
- stack_pointer[-1] = attr;
if (oparg & 1) stack_pointer[0] = null;
stack_pointer += (oparg & 1);
assert(WITHIN_STACK_BOUNDS());
@@ -6087,7 +6309,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = PyMapping_GetOptionalItem(BUILTINS(), &_Py_ID(__build_class__), &bc_o);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err < 0) goto error;
+ if (err < 0) {
+ goto error;
+ }
if (bc_o == NULL) {
_PyFrame_SetStackPointer(frame, stack_pointer);
_PyErr_SetString(tstate, PyExc_NameError,
@@ -6301,9 +6525,15 @@
goto error;
}
}
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(class_dict_st);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
value = PyStackRef_FromPyObjectSteal(value_o);
- stack_pointer[-1] = value;
+ stack_pointer[0] = value;
+ stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -6320,7 +6550,9 @@
int err = PyMapping_GetOptionalItem(PyStackRef_AsPyObjectBorrow(mod_or_class_dict), name, &v_o);
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(mod_or_class_dict);
- if (err < 0) goto pop_1_error;
+ if (err < 0) {
+ goto pop_1_error;
+ }
if (v_o == NULL) {
if (PyDict_CheckExact(GLOBALS())
&& PyDict_CheckExact(BUILTINS()))
@@ -6352,13 +6584,17 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = PyMapping_GetOptionalItem(GLOBALS(), name, &v_o);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err < 0) goto error;
+ if (err < 0) {
+ goto error;
+ }
if (v_o == NULL) {
/* namespace 2: builtins */
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = PyMapping_GetOptionalItem(BUILTINS(), name, &v_o);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err < 0) goto error;
+ if (err < 0) {
+ goto error;
+ }
if (v_o == NULL) {
_PyFrame_SetStackPointer(frame, stack_pointer);
_PyEval_FormatExcCheckArg(
@@ -6413,7 +6649,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
_PyEval_LoadGlobalStackRef(GLOBALS(), BUILTINS(), name, res);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (PyStackRef_IsNull(*res)) goto error;
+ if (PyStackRef_IsNull(*res)) {
+ goto error;
+ }
}
// _PUSH_NULL_CONDITIONAL
{
@@ -6556,7 +6794,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
PyObject *v_o = _PyEval_LoadName(tstate, frame, name);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (v_o == NULL) goto error;
+ if (v_o == NULL) {
+ goto error;
+ }
v = PyStackRef_FromPyObjectSteal(v_o);
stack_pointer[0] = v;
stack_pointer += 1;
@@ -6695,7 +6935,9 @@
PyStackRef_CLOSE(global_super_st);
PyStackRef_CLOSE(class_st);
PyStackRef_CLOSE(self_st);
- if (super == NULL) goto pop_3_error;
+ if (super == NULL) {
+ goto pop_3_error;
+ }
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2);
stack_pointer += -3;
assert(WITHIN_STACK_BOUNDS());
@@ -6703,7 +6945,9 @@
PyObject *attr_o = PyObject_GetAttr(super, name);
Py_DECREF(super);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (attr_o == NULL) goto error;
+ if (attr_o == NULL) {
+ goto error;
+ }
attr = PyStackRef_FromPyObjectSteal(attr_o);
}
// _PUSH_NULL_CONDITIONAL
@@ -6744,7 +6988,9 @@
PyStackRef_CLOSE(global_super_st);
PyStackRef_CLOSE(class_st);
PyStackRef_CLOSE(self_st);
- if (attr == NULL) goto pop_3_error;
+ if (attr == NULL) {
+ goto pop_3_error;
+ }
attr_st = PyStackRef_FromPyObjectSteal(attr);
stack_pointer[-3] = attr_st;
stack_pointer += -2;
@@ -6786,11 +7032,17 @@
if (method_found) {
self_or_null = self_st; // transfer ownership
} else {
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(self_st);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
self_or_null = PyStackRef_NULL;
+ stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
}
- PyStackRef_CLOSE(class_st);
PyStackRef_CLOSE(global_super_st);
+ PyStackRef_CLOSE(class_st);
attr = PyStackRef_FromPyObjectSteal(attr_o);
stack_pointer[-3] = attr;
stack_pointer[-2] = self_or_null;
@@ -6826,12 +7078,20 @@
PyFunctionObject *func_obj = (PyFunctionObject *)
PyFunction_New(codeobj, GLOBALS());
stack_pointer = _PyFrame_GetStackPointer(frame);
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(codeobj_st);
- if (func_obj == NULL) goto pop_1_error;
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ if (func_obj == NULL) {
+ goto error;
+ }
_PyFunction_SetVersion(
func_obj, ((PyCodeObject *)codeobj)->co_version);
func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj);
- stack_pointer[-1] = func;
+ stack_pointer[0] = func;
+ stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -6856,7 +7116,9 @@
PyStackRef_AsPyObjectSteal(value)
);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto pop_2_error;
+ if (err != 0) {
+ goto pop_2_error;
+ }
stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
@@ -6890,7 +7152,9 @@
attrs = PyStackRef_FromPyObjectSteal(attrs_o);
}
else {
- if (_PyErr_Occurred(tstate)) goto pop_3_error;
+ if (_PyErr_Occurred(tstate)) {
+ goto pop_3_error;
+ }
// Error!
attrs = PyStackRef_None; // Failure!
}
@@ -6914,7 +7178,9 @@
PyObject *values_or_none_o = _PyEval_MatchKeys(tstate,
PyStackRef_AsPyObjectBorrow(subject), PyStackRef_AsPyObjectBorrow(keys));
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (values_or_none_o == NULL) goto error;
+ if (values_or_none_o == NULL) {
+ goto error;
+ }
values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o);
stack_pointer[0] = values_or_none;
stack_pointer += 1;
@@ -7237,7 +7503,9 @@
_Py_CODEUNIT *bytecode =
_PyEval_GetExecutableCode(tstate, _PyFrame_GetCode(frame));
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (bytecode == NULL) goto error;
+ if (bytecode == NULL) {
+ goto error;
+ }
_PyFrame_SetStackPointer(frame, stack_pointer);
ptrdiff_t off = this_instr - _PyFrame_GetBytecode(frame);
stack_pointer = _PyFrame_GetStackPointer(frame);
@@ -7284,7 +7552,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = _Py_HandlePending(tstate);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err != 0) goto error;
+ if (err != 0) {
+ goto error;
+ }
}
}
}
@@ -7321,7 +7591,9 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (gen == NULL) goto error;
+ if (gen == NULL) {
+ goto error;
+ }
assert(EMPTY());
_PyFrame_SetStackPointer(frame, stack_pointer);
_PyInterpreterFrame *gen_frame = &gen->gi_iframe;
@@ -7455,10 +7727,16 @@
goto pop_1_error;
}
}
+ stack_pointer += -1;
+ assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
PyStackRef_CLOSE(v);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
retval = PyStackRef_FromPyObjectSteal(retval_o);
}
- stack_pointer[-1] = retval;
+ stack_pointer[0] = retval;
+ stack_pointer += 1;
+ assert(WITHIN_STACK_BOUNDS());
DISPATCH();
}
@@ -7530,18 +7808,24 @@
_PyFrame_SetStackPointer(frame, stack_pointer);
int err = PyMapping_GetOptionalItem(LOCALS(), &_Py_ID(__annotations__), &ann_dict);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err < 0) goto error;
+ if (err < 0) {
+ goto error;
+ }
if (ann_dict == NULL) {
_PyFrame_SetStackPointer(frame, stack_pointer);
ann_dict = PyDict_New();
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (ann_dict == NULL) goto error;
+ if (ann_dict == NULL) {
+ goto error;
+ }
_PyFrame_SetStackPointer(frame, stack_pointer);
err = PyObject_SetItem(LOCALS(), &_Py_ID(__annotations__),
ann_dict);
Py_DECREF(ann_dict);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (err) goto error;
+ if (err) {
+ goto error;
+ }
}
else {
_PyFrame_SetStackPointer(frame, stack_pointer);
@@ -7564,7 +7848,9 @@
PyStackRef_AsPyObjectBorrow(v));
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(v);
- if (err) goto pop_1_error;
+ if (err) {
+ goto pop_1_error;
+ }
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
@@ -7607,7 +7893,9 @@
PyStackRef_AsPyObjectBorrow(iterable));
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(iterable);
- if (err < 0) goto pop_1_error;
+ if (err < 0) {
+ goto pop_1_error;
+ }
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
@@ -7651,7 +7939,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(v);
PyStackRef_CLOSE(owner);
- if (err) goto pop_2_error;
+ if (err) {
+ goto pop_2_error;
+ }
}
stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
@@ -7707,10 +7997,10 @@
_PyDictValues_AddToInsertionOrder(values, index);
}
UNLOCK_OBJECT(owner_o);
- PyStackRef_CLOSE(owner);
stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
+ PyStackRef_CLOSE(owner);
Py_XDECREF(old_value);
stack_pointer = _PyFrame_GetStackPointer(frame);
}
@@ -7745,10 +8035,10 @@
PyObject *old_value = *(PyObject **)addr;
FT_ATOMIC_STORE_PTR_RELEASE(*(PyObject **)addr, PyStackRef_AsPyObjectSteal(value));
UNLOCK_OBJECT(owner_o);
- PyStackRef_CLOSE(owner);
stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
+ PyStackRef_CLOSE(owner);
Py_XDECREF(old_value);
stack_pointer = _PyFrame_GetStackPointer(frame);
}
@@ -7812,10 +8102,10 @@
// old_value should be DECREFed after GC track checking is done, if not, it could raise a segmentation fault,
// when dict only holds the strong reference to value in ep->me_value.
STAT_INC(STORE_ATTR, hit);
- PyStackRef_CLOSE(owner);
stack_pointer += -2;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
+ PyStackRef_CLOSE(owner);
Py_XDECREF(old_value);
stack_pointer = _PyFrame_GetStackPointer(frame);
}
@@ -7892,7 +8182,9 @@
int err = PyDict_SetItem(GLOBALS(), name, PyStackRef_AsPyObjectBorrow(v));
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(v);
- if (err) goto pop_1_error;
+ if (err) {
+ goto pop_1_error;
+ }
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
@@ -7926,7 +8218,9 @@
stack_pointer = _PyFrame_GetStackPointer(frame);
}
PyStackRef_CLOSE(v);
- if (err) goto pop_1_error;
+ if (err) {
+ goto pop_1_error;
+ }
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
@@ -7973,7 +8267,9 @@
}
PyStackRef_CLOSE(v);
PyStackRef_CLOSE(container);
- if (err) goto pop_4_error;
+ if (err) {
+ goto pop_4_error;
+ }
}
stack_pointer += -4;
assert(WITHIN_STACK_BOUNDS());
@@ -8018,7 +8314,9 @@
PyStackRef_CLOSE(v);
PyStackRef_CLOSE(container);
PyStackRef_CLOSE(sub);
- if (err) goto pop_3_error;
+ if (err) {
+ goto pop_3_error;
+ }
}
stack_pointer += -3;
assert(WITHIN_STACK_BOUNDS());
@@ -8045,10 +8343,14 @@
PyStackRef_AsPyObjectSteal(sub),
PyStackRef_AsPyObjectSteal(value));
stack_pointer = _PyFrame_GetStackPointer(frame);
- PyStackRef_CLOSE(dict_st);
- if (err) goto pop_3_error;
stack_pointer += -3;
assert(WITHIN_STACK_BOUNDS());
+ _PyFrame_SetStackPointer(frame, stack_pointer);
+ PyStackRef_CLOSE(dict_st);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
+ if (err) {
+ goto error;
+ }
DISPATCH();
}
@@ -8083,10 +8385,10 @@
assert(old_value != NULL);
UNLOCK_OBJECT(list); // unlock before decrefs!
PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc);
- PyStackRef_CLOSE(list_st);
stack_pointer += -3;
assert(WITHIN_STACK_BOUNDS());
_PyFrame_SetStackPointer(frame, stack_pointer);
+ PyStackRef_CLOSE(list_st);
Py_DECREF(old_value);
stack_pointer = _PyFrame_GetStackPointer(frame);
DISPATCH();
@@ -8096,17 +8398,14 @@
frame->instr_ptr = next_instr;
next_instr += 1;
INSTRUCTION_STATS(SWAP);
- _PyStackRef bottom_in;
- _PyStackRef top_in;
- _PyStackRef top_out;
- _PyStackRef bottom_out;
- top_in = stack_pointer[-1];
- bottom_in = stack_pointer[-2 - (oparg-2)];
- bottom_out = bottom_in;
- top_out = top_in;
+ _PyStackRef *bottom;
+ _PyStackRef *top;
+ top = &stack_pointer[-1];
+ bottom = &stack_pointer[-2 - (oparg-2)];
+ _PyStackRef temp = bottom[0];
+ bottom[0] = top[0];
+ top[0] = temp;
assert(oparg >= 2);
- stack_pointer[-2 - (oparg-2)] = top_out;
- stack_pointer[-1] = bottom_out;
DISPATCH();
}
@@ -8143,7 +8442,9 @@
int err = PyObject_IsTrue(PyStackRef_AsPyObjectBorrow(value));
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(value);
- if (err < 0) goto pop_1_error;
+ if (err < 0) {
+ goto pop_1_error;
+ }
res = err ? PyStackRef_True : PyStackRef_False;
}
stack_pointer[-1] = res;
@@ -8291,7 +8592,9 @@
PyObject *res_o = PyNumber_Invert(PyStackRef_AsPyObjectBorrow(value));
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(value);
- if (res_o == NULL) goto pop_1_error;
+ if (res_o == NULL) {
+ goto pop_1_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-1] = res;
DISPATCH();
@@ -8308,7 +8611,9 @@
PyObject *res_o = PyNumber_Negative(PyStackRef_AsPyObjectBorrow(value));
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(value);
- if (res_o == NULL) goto pop_1_error;
+ if (res_o == NULL) {
+ goto pop_1_error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-1] = res;
DISPATCH();
@@ -8341,7 +8646,9 @@
int res = _PyEval_UnpackIterableStackRef(tstate, seq, oparg & 0xFF, oparg >> 8, top);
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(seq);
- if (res == 0) goto pop_1_error;
+ if (res == 0) {
+ goto pop_1_error;
+ }
stack_pointer += (oparg & 0xFF) + (oparg >> 8);
assert(WITHIN_STACK_BOUNDS());
DISPATCH();
@@ -8383,7 +8690,9 @@
int res = _PyEval_UnpackIterableStackRef(tstate, seq, oparg, -1, top);
stack_pointer = _PyFrame_GetStackPointer(frame);
PyStackRef_CLOSE(seq);
- if (res == 0) goto pop_1_error;
+ if (res == 0) {
+ goto pop_1_error;
+ }
}
stack_pointer += -1 + oparg;
assert(WITHIN_STACK_BOUNDS());
@@ -8512,7 +8821,9 @@
PyObject *res_o = PyObject_Vectorcall(exit_func_o, stack + 2 - has_self,
(3 + has_self) | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
stack_pointer = _PyFrame_GetStackPointer(frame);
- if (res_o == NULL) goto error;
+ if (res_o == NULL) {
+ goto error;
+ }
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[0] = res;
stack_pointer += 1;
@@ -8591,20 +8902,20 @@
pop_4_error:
{
- STACK_SHRINK(1);
- goto pop_3_error;
+ STACK_SHRINK(4);
+ goto error;
}
pop_3_error:
{
- STACK_SHRINK(1);
- goto pop_2_error;
+ STACK_SHRINK(3);
+ goto error;
}
pop_2_error:
{
- STACK_SHRINK(1);
- goto pop_1_error;
+ STACK_SHRINK(2);
+ goto error;
}
pop_1_error: