mirror of
https://github.com/python/cpython.git
synced 2025-10-21 22:22:48 +00:00
GH-127705: Use _PyStackRef
s in the default build. (GH-127875)
This commit is contained in:
parent
7cc99a54b7
commit
2bef8ea8ea
21 changed files with 688 additions and 254 deletions
114
Python/executor_cases.c.h
generated
114
Python/executor_cases.c.h
generated
|
@ -218,7 +218,7 @@
|
|||
_PyStackRef value;
|
||||
oparg = CURRENT_OPARG();
|
||||
PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg);
|
||||
value = PyStackRef_FromPyObjectNew(obj);
|
||||
value = PyStackRef_FromPyObjectNewMortal(obj);
|
||||
stack_pointer[0] = value;
|
||||
stack_pointer += 1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -306,6 +306,10 @@
|
|||
oparg = 0;
|
||||
assert(oparg == CURRENT_OPARG());
|
||||
value = stack_pointer[-1];
|
||||
assert(
|
||||
((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) ||
|
||||
PyStackRef_IsHeapSafe(value)
|
||||
);
|
||||
_PyStackRef tmp = GETLOCAL(oparg);
|
||||
GETLOCAL(oparg) = value;
|
||||
stack_pointer += -1;
|
||||
|
@ -321,6 +325,10 @@
|
|||
oparg = 1;
|
||||
assert(oparg == CURRENT_OPARG());
|
||||
value = stack_pointer[-1];
|
||||
assert(
|
||||
((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) ||
|
||||
PyStackRef_IsHeapSafe(value)
|
||||
);
|
||||
_PyStackRef tmp = GETLOCAL(oparg);
|
||||
GETLOCAL(oparg) = value;
|
||||
stack_pointer += -1;
|
||||
|
@ -336,6 +344,10 @@
|
|||
oparg = 2;
|
||||
assert(oparg == CURRENT_OPARG());
|
||||
value = stack_pointer[-1];
|
||||
assert(
|
||||
((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) ||
|
||||
PyStackRef_IsHeapSafe(value)
|
||||
);
|
||||
_PyStackRef tmp = GETLOCAL(oparg);
|
||||
GETLOCAL(oparg) = value;
|
||||
stack_pointer += -1;
|
||||
|
@ -351,6 +363,10 @@
|
|||
oparg = 3;
|
||||
assert(oparg == CURRENT_OPARG());
|
||||
value = stack_pointer[-1];
|
||||
assert(
|
||||
((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) ||
|
||||
PyStackRef_IsHeapSafe(value)
|
||||
);
|
||||
_PyStackRef tmp = GETLOCAL(oparg);
|
||||
GETLOCAL(oparg) = value;
|
||||
stack_pointer += -1;
|
||||
|
@ -366,6 +382,10 @@
|
|||
oparg = 4;
|
||||
assert(oparg == CURRENT_OPARG());
|
||||
value = stack_pointer[-1];
|
||||
assert(
|
||||
((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) ||
|
||||
PyStackRef_IsHeapSafe(value)
|
||||
);
|
||||
_PyStackRef tmp = GETLOCAL(oparg);
|
||||
GETLOCAL(oparg) = value;
|
||||
stack_pointer += -1;
|
||||
|
@ -381,6 +401,10 @@
|
|||
oparg = 5;
|
||||
assert(oparg == CURRENT_OPARG());
|
||||
value = stack_pointer[-1];
|
||||
assert(
|
||||
((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) ||
|
||||
PyStackRef_IsHeapSafe(value)
|
||||
);
|
||||
_PyStackRef tmp = GETLOCAL(oparg);
|
||||
GETLOCAL(oparg) = value;
|
||||
stack_pointer += -1;
|
||||
|
@ -396,6 +420,10 @@
|
|||
oparg = 6;
|
||||
assert(oparg == CURRENT_OPARG());
|
||||
value = stack_pointer[-1];
|
||||
assert(
|
||||
((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) ||
|
||||
PyStackRef_IsHeapSafe(value)
|
||||
);
|
||||
_PyStackRef tmp = GETLOCAL(oparg);
|
||||
GETLOCAL(oparg) = value;
|
||||
stack_pointer += -1;
|
||||
|
@ -411,6 +439,10 @@
|
|||
oparg = 7;
|
||||
assert(oparg == CURRENT_OPARG());
|
||||
value = stack_pointer[-1];
|
||||
assert(
|
||||
((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) ||
|
||||
PyStackRef_IsHeapSafe(value)
|
||||
);
|
||||
_PyStackRef tmp = GETLOCAL(oparg);
|
||||
GETLOCAL(oparg) = value;
|
||||
stack_pointer += -1;
|
||||
|
@ -425,6 +457,10 @@
|
|||
_PyStackRef value;
|
||||
oparg = CURRENT_OPARG();
|
||||
value = stack_pointer[-1];
|
||||
assert(
|
||||
((_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_GENERATOR)) == 0) ||
|
||||
PyStackRef_IsHeapSafe(value)
|
||||
);
|
||||
_PyStackRef tmp = GETLOCAL(oparg);
|
||||
GETLOCAL(oparg) = value;
|
||||
stack_pointer += -1;
|
||||
|
@ -863,13 +899,13 @@
|
|||
double dres =
|
||||
((PyFloatObject *)left_o)->ob_fval *
|
||||
((PyFloatObject *)right_o)->ob_fval;
|
||||
PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2;
|
||||
res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
|
||||
if (PyStackRef_IsNull(res)) {
|
||||
stack_pointer[-2] = res;
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
JUMP_TO_ERROR();
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
stack_pointer[-2] = res;
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -890,13 +926,13 @@
|
|||
double dres =
|
||||
((PyFloatObject *)left_o)->ob_fval +
|
||||
((PyFloatObject *)right_o)->ob_fval;
|
||||
PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2;
|
||||
res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
|
||||
if (PyStackRef_IsNull(res)) {
|
||||
stack_pointer[-2] = res;
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
JUMP_TO_ERROR();
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
stack_pointer[-2] = res;
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -917,13 +953,13 @@
|
|||
double dres =
|
||||
((PyFloatObject *)left_o)->ob_fval -
|
||||
((PyFloatObject *)right_o)->ob_fval;
|
||||
PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
|
||||
if (res_o == NULL) {
|
||||
stack_pointer += -2;
|
||||
res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
|
||||
if (PyStackRef_IsNull(res)) {
|
||||
stack_pointer[-2] = res;
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
JUMP_TO_ERROR();
|
||||
}
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
stack_pointer[-2] = res;
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -991,6 +1027,7 @@
|
|||
next_oparg = CURRENT_OPERAND0();
|
||||
#endif
|
||||
_PyStackRef *target_local = &GETLOCAL(next_oparg);
|
||||
assert(PyUnicode_CheckExact(left_o));
|
||||
if (PyStackRef_AsPyObjectBorrow(*target_local) != left_o) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
|
@ -1205,6 +1242,7 @@
|
|||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
STAT_INC(BINARY_OP, hit);
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
#else
|
||||
if (index >= PyList_GET_SIZE(list)) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
|
@ -1213,18 +1251,21 @@
|
|||
STAT_INC(BINARY_OP, hit);
|
||||
PyObject *res_o = PyList_GET_ITEM(list, index);
|
||||
assert(res_o != NULL);
|
||||
Py_INCREF(res_o);
|
||||
res = PyStackRef_FromPyObjectNew(res_o);
|
||||
#endif
|
||||
PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc);
|
||||
stack_pointer += -2;
|
||||
STAT_INC(BINARY_SUBSCR, hit);
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
_PyStackRef tmp = list_st;
|
||||
list_st = res;
|
||||
stack_pointer[-2] = list_st;
|
||||
PyStackRef_CLOSE(tmp);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
PyStackRef_CLOSE(list_st);
|
||||
PyStackRef_CLOSE(sub_st);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
stack_pointer[0] = res;
|
||||
stack_pointer += 1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
stack_pointer[-1] = res;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1267,7 +1308,7 @@
|
|||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
PyStackRef_CLOSE(str_st);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
res = PyStackRef_FromPyObjectImmortal(res_o);
|
||||
stack_pointer[0] = res;
|
||||
stack_pointer += 1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -1303,17 +1344,17 @@
|
|||
STAT_INC(BINARY_OP, hit);
|
||||
PyObject *res_o = PyTuple_GET_ITEM(tuple, index);
|
||||
assert(res_o != NULL);
|
||||
Py_INCREF(res_o);
|
||||
PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc);
|
||||
stack_pointer += -2;
|
||||
res = PyStackRef_FromPyObjectNew(res_o);
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
PyStackRef_CLOSE(tuple_st);
|
||||
_PyStackRef tmp = tuple_st;
|
||||
tuple_st = res;
|
||||
stack_pointer[-1] = tuple_st;
|
||||
PyStackRef_CLOSE(tmp);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
res = PyStackRef_FromPyObjectSteal(res_o);
|
||||
stack_pointer[0] = res;
|
||||
stack_pointer += 1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
stack_pointer[-1] = res;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1654,6 +1695,7 @@
|
|||
retval = stack_pointer[-1];
|
||||
assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
|
||||
_PyStackRef temp = retval;
|
||||
assert(PyStackRef_IsHeapSafe(temp));
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
|
@ -2534,7 +2576,7 @@
|
|||
if (tup_o == NULL) {
|
||||
JUMP_TO_ERROR();
|
||||
}
|
||||
tup = PyStackRef_FromPyObjectSteal(tup_o);
|
||||
tup = PyStackRef_FromPyObjectStealMortal(tup_o);
|
||||
stack_pointer[-oparg] = tup;
|
||||
stack_pointer += 1 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -2552,7 +2594,7 @@
|
|||
if (list_o == NULL) {
|
||||
JUMP_TO_ERROR();
|
||||
}
|
||||
list = PyStackRef_FromPyObjectSteal(list_o);
|
||||
list = PyStackRef_FromPyObjectStealMortal(list_o);
|
||||
stack_pointer[-oparg] = list;
|
||||
stack_pointer += 1 - oparg;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -2666,7 +2708,7 @@
|
|||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
JUMP_TO_ERROR();
|
||||
}
|
||||
set = PyStackRef_FromPyObjectSteal(set_o);
|
||||
set = PyStackRef_FromPyObjectStealMortal(set_o);
|
||||
stack_pointer[0] = set;
|
||||
stack_pointer += 1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -2712,7 +2754,7 @@
|
|||
if (map_o == NULL) {
|
||||
JUMP_TO_ERROR();
|
||||
}
|
||||
map = PyStackRef_FromPyObjectSteal(map_o);
|
||||
map = PyStackRef_FromPyObjectStealMortal(map_o);
|
||||
stack_pointer[0] = map;
|
||||
stack_pointer += 1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -5047,7 +5089,7 @@
|
|||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
STAT_INC(CALL, hit);
|
||||
res = PyStackRef_FromPyObjectSteal(Py_NewRef(Py_TYPE(arg_o)));
|
||||
res = PyStackRef_FromPyObjectNew(Py_TYPE(arg_o));
|
||||
stack_pointer[-3] = res;
|
||||
stack_pointer += -2;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -6394,7 +6436,7 @@
|
|||
frame = tstate->current_frame = prev;
|
||||
LOAD_IP(frame->return_offset);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
res = PyStackRef_FromPyObjectSteal((PyObject *)gen);
|
||||
res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen);
|
||||
LLTRACE_RESUME_FRAME();
|
||||
stack_pointer[0] = res;
|
||||
stack_pointer += 1;
|
||||
|
@ -6424,7 +6466,7 @@
|
|||
if (slice_o == NULL) {
|
||||
JUMP_TO_ERROR();
|
||||
}
|
||||
slice = PyStackRef_FromPyObjectSteal(slice_o);
|
||||
slice = PyStackRef_FromPyObjectStealMortal(slice_o);
|
||||
stack_pointer[0] = slice;
|
||||
stack_pointer += 1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue