mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
GH-132508: Use tagged integers on the evaluation stack for the last instruction offset (GH-132545)
This commit is contained in:
parent
caee16f052
commit
ccf1b0b1c1
14 changed files with 129 additions and 60 deletions
24
Python/generated_cases.c.h
generated
24
Python/generated_cases.c.h
generated
|
@ -10191,20 +10191,7 @@
|
|||
PyObject *exc = PyStackRef_AsPyObjectSteal(exc_st);
|
||||
assert(oparg >= 0 && oparg <= 2);
|
||||
if (oparg) {
|
||||
PyObject *lasti = PyStackRef_AsPyObjectBorrow(values[0]);
|
||||
if (PyLong_Check(lasti)) {
|
||||
frame->instr_ptr = _PyFrame_GetBytecode(frame) + PyLong_AsLong(lasti);
|
||||
assert(!_PyErr_Occurred(tstate));
|
||||
}
|
||||
else {
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
_PyErr_SetString(tstate, PyExc_SystemError, "lasti is not an int");
|
||||
Py_DECREF(exc);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
JUMP_TO_LABEL(error);
|
||||
}
|
||||
frame->instr_ptr = _PyFrame_GetBytecode(frame) + PyStackRef_UntagInt(values[0]);
|
||||
}
|
||||
assert(exc && PyExceptionInstance_Check(exc));
|
||||
stack_pointer += -1;
|
||||
|
@ -12059,7 +12046,7 @@
|
|||
if (tb == NULL) {
|
||||
tb = Py_None;
|
||||
}
|
||||
assert(PyStackRef_LongCheck(lasti));
|
||||
assert(PyStackRef_IsTaggedInt(lasti));
|
||||
(void)lasti;
|
||||
PyObject *stack[5] = {NULL, PyStackRef_AsPyObjectBorrow(exit_self), exc, val_o, tb};
|
||||
int has_self = !PyStackRef_IsNull(exit_self);
|
||||
|
@ -12231,11 +12218,8 @@ JUMP_TO_LABEL(error);
|
|||
}
|
||||
if (lasti) {
|
||||
int frame_lasti = _PyInterpreterFrame_LASTI(frame);
|
||||
PyObject *lasti = PyLong_FromLong(frame_lasti);
|
||||
if (lasti == NULL) {
|
||||
JUMP_TO_LABEL(exception_unwind);
|
||||
}
|
||||
_PyFrame_StackPush(frame, PyStackRef_FromPyObjectSteal(lasti));
|
||||
_PyStackRef lasti = PyStackRef_TagInt(frame_lasti);
|
||||
_PyFrame_StackPush(frame, lasti);
|
||||
}
|
||||
PyObject *exc = _PyErr_GetRaisedException(tstate);
|
||||
_PyFrame_StackPush(frame, PyStackRef_FromPyObjectSteal(exc));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue