Skip to content

Commit a7b0f63

Browse files
authored
pythonGH-111772: Specialize slot loads and stores for _Py_T_OBJECT (pythonGH-111773)
1 parent d78c872 commit a7b0f63

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Specialize slot loads and stores for _Py_T_OBJECT as well as Py_T_OBJECT_EX

Python/specialize.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ analyze_descriptor(PyTypeObject *type, PyObject *name, PyObject **descr, int sto
742742
if (desc_cls == &PyMemberDescr_Type) {
743743
PyMemberDescrObject *member = (PyMemberDescrObject *)descriptor;
744744
struct PyMemberDef *dmem = member->d_member;
745-
if (dmem->type == Py_T_OBJECT_EX) {
745+
if (dmem->type == Py_T_OBJECT_EX || dmem->type == _Py_T_OBJECT) {
746746
return OBJECT_SLOT;
747747
}
748748
return OTHER_SLOT;
@@ -942,7 +942,7 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name)
942942
SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OUT_OF_RANGE);
943943
goto fail;
944944
}
945-
assert(dmem->type == Py_T_OBJECT_EX);
945+
assert(dmem->type == Py_T_OBJECT_EX || dmem->type == _Py_T_OBJECT);
946946
assert(offset > 0);
947947
cache->index = (uint16_t)offset;
948948
write_u32(cache->version, type->tp_version_tag);
@@ -1082,7 +1082,7 @@ _Py_Specialize_StoreAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name)
10821082
SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_OUT_OF_RANGE);
10831083
goto fail;
10841084
}
1085-
assert(dmem->type == Py_T_OBJECT_EX);
1085+
assert(dmem->type == Py_T_OBJECT_EX || dmem->type == _Py_T_OBJECT);
10861086
assert(offset > 0);
10871087
cache->index = (uint16_t)offset;
10881088
write_u32(cache->version, type->tp_version_tag);

0 commit comments

Comments
 (0)