mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-136125: Use _PyObject_GetMethodStackRef
for LOAD_ATTR
(GH-136127)
This commit is contained in:
parent
17cf0a343b
commit
e0d6500b2d
6 changed files with 29 additions and 32 deletions
17
Python/generated_cases.c.h
generated
17
Python/generated_cases.c.h
generated
|
@ -7941,7 +7941,7 @@
|
|||
_Py_CODEUNIT* const this_instr = next_instr - 10;
|
||||
(void)this_instr;
|
||||
_PyStackRef owner;
|
||||
_PyStackRef attr;
|
||||
_PyStackRef *attr;
|
||||
_PyStackRef *self_or_null;
|
||||
// _SPECIALIZE_LOAD_ATTR
|
||||
{
|
||||
|
@ -7964,16 +7964,16 @@
|
|||
/* Skip 8 cache entries */
|
||||
// _LOAD_ATTR
|
||||
{
|
||||
attr = &stack_pointer[-1];
|
||||
self_or_null = &stack_pointer[0];
|
||||
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1);
|
||||
PyObject *attr_o;
|
||||
if (oparg & 1) {
|
||||
attr_o = NULL;
|
||||
*attr = PyStackRef_NULL;
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
int is_meth = _PyObject_GetMethod(PyStackRef_AsPyObjectBorrow(owner), name, &attr_o);
|
||||
int is_meth = _PyObject_GetMethodStackRef(tstate, PyStackRef_AsPyObjectBorrow(owner), name, attr);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
if (is_meth) {
|
||||
assert(attr_o != NULL);
|
||||
assert(!PyStackRef_IsNull(*attr));
|
||||
self_or_null[0] = owner;
|
||||
}
|
||||
else {
|
||||
|
@ -7982,7 +7982,7 @@
|
|||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
PyStackRef_CLOSE(owner);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
if (attr_o == NULL) {
|
||||
if (PyStackRef_IsNull(*attr)) {
|
||||
JUMP_TO_LABEL(error);
|
||||
}
|
||||
self_or_null[0] = PyStackRef_NULL;
|
||||
|
@ -7991,7 +7991,7 @@
|
|||
}
|
||||
else {
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
attr_o = PyObject_GetAttr(PyStackRef_AsPyObjectBorrow(owner), name);
|
||||
PyObject *attr_o = PyObject_GetAttr(PyStackRef_AsPyObjectBorrow(owner), name);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
stack_pointer += -1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
@ -8001,11 +8001,10 @@
|
|||
if (attr_o == NULL) {
|
||||
JUMP_TO_LABEL(error);
|
||||
}
|
||||
*attr = PyStackRef_FromPyObjectSteal(attr_o);
|
||||
stack_pointer += 1;
|
||||
}
|
||||
attr = PyStackRef_FromPyObjectSteal(attr_o);
|
||||
}
|
||||
stack_pointer[-1] = attr;
|
||||
stack_pointer += (oparg&1);
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
DISPATCH();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue