mirror of
https://github.com/python/cpython.git
synced 2025-07-09 20:35:26 +00:00
GH-122155: Track local variables between pops and pushes in cases generator (GH-122286)
This commit is contained in:
parent
46f5a4f9e1
commit
a9d56e38a0
13 changed files with 463 additions and 159 deletions
216
Python/generated_cases.c.h
generated
216
Python/generated_cases.c.h
generated
|
@ -610,11 +610,19 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(values[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *list_o = _PyList_FromArraySteal(values_o, oparg);
|
||||
STACKREFS_TO_PYOBJECTS_CLEANUP(values_o);
|
||||
if (list_o == NULL) { stack_pointer += -oparg; goto error; }
|
||||
if (list_o == NULL) {
|
||||
stack_pointer += -oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
list = PyStackRef_FromPyObjectSteal(list_o);
|
||||
stack_pointer[-oparg] = list;
|
||||
stack_pointer += 1 - oparg;
|
||||
|
@ -634,7 +642,11 @@
|
|||
for (int _i = oparg*2; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(values[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -oparg*2; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -oparg*2;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *map_o = _PyDict_FromItems(
|
||||
values_o, 2,
|
||||
|
@ -644,7 +656,11 @@
|
|||
for (int _i = oparg*2; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(values[_i]);
|
||||
}
|
||||
if (map_o == NULL) { stack_pointer += -oparg*2; goto error; }
|
||||
if (map_o == NULL) {
|
||||
stack_pointer += -oparg*2;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
map = PyStackRef_FromPyObjectSteal(map_o);
|
||||
stack_pointer[-oparg*2] = map;
|
||||
stack_pointer += 1 - oparg*2;
|
||||
|
@ -664,7 +680,11 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(values[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
int err = 0;
|
||||
for (int i = 0; i < oparg; i++) {
|
||||
|
@ -676,7 +696,11 @@
|
|||
}
|
||||
if (err != 0) {
|
||||
Py_DECREF(set_o);
|
||||
if (true) { stack_pointer += -oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
set = PyStackRef_FromPyObjectSteal(set_o);
|
||||
stack_pointer[-oparg] = set;
|
||||
|
@ -703,7 +727,11 @@
|
|||
PyStackRef_CLOSE(start);
|
||||
PyStackRef_CLOSE(stop);
|
||||
PyStackRef_XCLOSE(step);
|
||||
if (slice_o == NULL) { stack_pointer += -2 - ((oparg == 3) ? 1 : 0); goto error; }
|
||||
if (slice_o == NULL) {
|
||||
stack_pointer += -2 - ((oparg == 3) ? 1 : 0);
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
slice = PyStackRef_FromPyObjectSteal(slice_o);
|
||||
stack_pointer[-2 - ((oparg == 3) ? 1 : 0)] = slice;
|
||||
stack_pointer += -1 - ((oparg == 3) ? 1 : 0);
|
||||
|
@ -723,14 +751,22 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(pieces[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -oparg; goto error; }
|
||||
if (true) {
|
||||
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);
|
||||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(pieces[_i]);
|
||||
}
|
||||
if (str_o == NULL) { stack_pointer += -oparg; goto error; }
|
||||
if (str_o == NULL) {
|
||||
stack_pointer += -oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
str = PyStackRef_FromPyObjectSteal(str_o);
|
||||
stack_pointer[-oparg] = str;
|
||||
stack_pointer += 1 - oparg;
|
||||
|
@ -746,7 +782,11 @@
|
|||
_PyStackRef tup;
|
||||
values = &stack_pointer[-oparg];
|
||||
PyObject *tup_o = _PyTuple_FromStackRefSteal(values, oparg);
|
||||
if (tup_o == NULL) { stack_pointer += -oparg; goto error; }
|
||||
if (tup_o == NULL) {
|
||||
stack_pointer += -oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
tup = PyStackRef_FromPyObjectSteal(tup_o);
|
||||
stack_pointer[-oparg] = tup;
|
||||
stack_pointer += 1 - oparg;
|
||||
|
@ -780,7 +820,6 @@
|
|||
self_or_null = stack_pointer[-1 - oparg];
|
||||
callable = stack_pointer[-2 - oparg];
|
||||
{
|
||||
args = &stack_pointer[-oparg];
|
||||
uint16_t counter = read_u16(&this_instr[1].cache);
|
||||
(void)counter;
|
||||
#if ENABLE_SPECIALIZATION
|
||||
|
@ -795,7 +834,9 @@
|
|||
}
|
||||
/* Skip 2 cache entries */
|
||||
// _MAYBE_EXPAND_METHOD
|
||||
args = &stack_pointer[-oparg];
|
||||
{
|
||||
args = &stack_pointer[-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;
|
||||
|
@ -813,6 +854,7 @@
|
|||
}
|
||||
}
|
||||
// _DO_CALL
|
||||
args = &stack_pointer[-oparg];
|
||||
self_or_null = maybe_self;
|
||||
callable = func;
|
||||
{
|
||||
|
@ -852,7 +894,11 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(args[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *res_o = PyObject_Vectorcall(
|
||||
callable_o, args_o,
|
||||
|
@ -881,7 +927,11 @@
|
|||
for (int i = 0; i < total_args; i++) {
|
||||
PyStackRef_CLOSE(args[i]);
|
||||
}
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -1190,7 +1240,11 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(args[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *res_o = tp->tp_vectorcall((PyObject *)tp, args_o, total_args, NULL);
|
||||
STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
|
||||
|
@ -1199,7 +1253,11 @@
|
|||
PyStackRef_CLOSE(args[i]);
|
||||
}
|
||||
PyStackRef_CLOSE(callable);
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -1247,7 +1305,11 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(args[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *res_o = ((PyCFunctionFast)(void(*)(void))cfunc)(
|
||||
PyCFunction_GET_SELF(callable_o),
|
||||
|
@ -1260,7 +1322,11 @@
|
|||
PyStackRef_CLOSE(args[i]);
|
||||
}
|
||||
PyStackRef_CLOSE(callable);
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -1310,7 +1376,11 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(args[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *res_o = cfunc(PyCFunction_GET_SELF(callable_o), args_o, total_args, NULL);
|
||||
STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
|
||||
|
@ -1320,7 +1390,11 @@
|
|||
PyStackRef_CLOSE(args[i]);
|
||||
}
|
||||
PyStackRef_CLOSE(callable);
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -1370,7 +1444,11 @@
|
|||
assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
|
||||
PyStackRef_CLOSE(arg);
|
||||
PyStackRef_CLOSE(callable);
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -1467,7 +1545,11 @@
|
|||
PyStackRef_CLOSE(callargs_st);
|
||||
PyStackRef_XCLOSE(kwargs_st);
|
||||
assert(PyStackRef_AsPyObjectBorrow(PEEK(2 + (oparg & 1))) == NULL);
|
||||
if (PyStackRef_IsNull(result)) { stack_pointer += -3 - (oparg & 1); goto error; }
|
||||
if (PyStackRef_IsNull(result)) {
|
||||
stack_pointer += -3 - (oparg & 1);
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
stack_pointer[-3 - (oparg & 1)] = result;
|
||||
stack_pointer += -2 - (oparg & 1);
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -1625,7 +1707,11 @@
|
|||
PyStackRef_CLOSE(args[_i]);
|
||||
}
|
||||
PyStackRef_CLOSE(kwnames);
|
||||
if (true) { stack_pointer += -3 - oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -3 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *res_o = PyObject_Vectorcall(
|
||||
callable_o, args_o,
|
||||
|
@ -1655,7 +1741,11 @@
|
|||
for (int i = 0; i < total_args; i++) {
|
||||
PyStackRef_CLOSE(args[i]);
|
||||
}
|
||||
if (res_o == NULL) { stack_pointer += -3 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -3 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
stack_pointer[-3 - oparg] = res;
|
||||
stack_pointer += -2 - oparg;
|
||||
|
@ -1785,7 +1875,11 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(args[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *res_o = cfunc(self, (args_o + 1), nargs);
|
||||
STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
|
||||
|
@ -1795,7 +1889,11 @@
|
|||
PyStackRef_CLOSE(args[i]);
|
||||
}
|
||||
PyStackRef_CLOSE(callable);
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -1848,7 +1946,11 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(args[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *res_o = cfunc(self, (args_o + 1), nargs, NULL);
|
||||
STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
|
||||
|
@ -1858,7 +1960,11 @@
|
|||
PyStackRef_CLOSE(args[i]);
|
||||
}
|
||||
PyStackRef_CLOSE(callable);
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -1912,7 +2018,11 @@
|
|||
assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
|
||||
PyStackRef_CLOSE(self_stackref);
|
||||
PyStackRef_CLOSE(callable);
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -1969,7 +2079,11 @@
|
|||
PyStackRef_CLOSE(self_stackref);
|
||||
PyStackRef_CLOSE(arg_stackref);
|
||||
PyStackRef_CLOSE(callable);
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -2022,7 +2136,11 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(args[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *res_o = PyObject_Vectorcall(
|
||||
callable_o, args_o,
|
||||
|
@ -2034,7 +2152,11 @@
|
|||
for (int i = 0; i < total_args; i++) {
|
||||
PyStackRef_CLOSE(args[i]);
|
||||
}
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -3526,6 +3648,7 @@
|
|||
self_or_null = stack_pointer[-1 - oparg];
|
||||
callable = stack_pointer[-2 - oparg];
|
||||
{
|
||||
args = &stack_pointer[-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;
|
||||
|
@ -3543,6 +3666,7 @@
|
|||
}
|
||||
}
|
||||
// _MONITOR_CALL
|
||||
args = &stack_pointer[-oparg];
|
||||
{
|
||||
int is_meth = !PyStackRef_IsNull(maybe_self);
|
||||
PyObject *function = PyStackRef_AsPyObjectBorrow(func);
|
||||
|
@ -3563,6 +3687,7 @@
|
|||
if (err) goto error;
|
||||
}
|
||||
// _DO_CALL
|
||||
args = &stack_pointer[-oparg];
|
||||
self_or_null = maybe_self;
|
||||
callable = func;
|
||||
{
|
||||
|
@ -3602,7 +3727,11 @@
|
|||
for (int _i = oparg; --_i >= 0;) {
|
||||
PyStackRef_CLOSE(args[_i]);
|
||||
}
|
||||
if (true) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
PyObject *res_o = PyObject_Vectorcall(
|
||||
callable_o, args_o,
|
||||
|
@ -3631,7 +3760,11 @@
|
|||
for (int i = 0; i < total_args; i++) {
|
||||
PyStackRef_CLOSE(args[i]);
|
||||
}
|
||||
if (res_o == NULL) { stack_pointer += -2 - oparg; goto error; }
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
}
|
||||
// _CHECK_PERIODIC
|
||||
|
@ -5777,7 +5910,11 @@
|
|||
"bad RAISE_VARARGS oparg");
|
||||
break;
|
||||
}
|
||||
if (true) { stack_pointer += -oparg; goto error; }
|
||||
if (true) {
|
||||
stack_pointer += -oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
TARGET(RERAISE) {
|
||||
|
@ -6834,13 +6971,14 @@
|
|||
next_instr += 1;
|
||||
INSTRUCTION_STATS(UNPACK_EX);
|
||||
_PyStackRef seq;
|
||||
_PyStackRef *right;
|
||||
seq = stack_pointer[-1];
|
||||
int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8);
|
||||
_PyStackRef *top = stack_pointer + totalargs - 1;
|
||||
right = &stack_pointer[(oparg & 0xFF)];
|
||||
_PyStackRef *top = right + (oparg >> 8);
|
||||
int res = _PyEval_UnpackIterableStackRef(tstate, seq, oparg & 0xFF, oparg >> 8, top);
|
||||
PyStackRef_CLOSE(seq);
|
||||
if (res == 0) goto pop_1_error;
|
||||
stack_pointer += (oparg >> 8) + (oparg & 0xFF);
|
||||
stack_pointer += (oparg & 0xFF) + (oparg >> 8);
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
DISPATCH();
|
||||
}
|
||||
|
@ -6853,6 +6991,7 @@
|
|||
_Py_CODEUNIT *this_instr = next_instr - 2;
|
||||
(void)this_instr;
|
||||
_PyStackRef seq;
|
||||
_PyStackRef *output;
|
||||
// _SPECIALIZE_UNPACK_SEQUENCE
|
||||
seq = stack_pointer[-1];
|
||||
{
|
||||
|
@ -6872,7 +7011,8 @@
|
|||
}
|
||||
// _UNPACK_SEQUENCE
|
||||
{
|
||||
_PyStackRef *top = stack_pointer + oparg - 1;
|
||||
output = &stack_pointer[-1];
|
||||
_PyStackRef *top = output + oparg;
|
||||
int res = _PyEval_UnpackIterableStackRef(tstate, seq, oparg, -1, top);
|
||||
PyStackRef_CLOSE(seq);
|
||||
if (res == 0) goto pop_1_error;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue