aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/generated_cases.c.h
diff options
context:
space:
mode:
authorKen Jin <kenjin@python.org>2024-12-31 12:24:17 +0800
committerGitHub <noreply@github.com>2024-12-31 12:24:17 +0800
commit7ef49074123511003c8b7f7f3ba2a4e05285e8dc (patch)
tree1719d0d2fd187f79bd1398b9f230bb5a65c9502e /Python/generated_cases.c.h
parentdafe7a44630aa32bb411cceb45c7b7df725e3fe3 (diff)
downloadcpython-7ef49074123511003c8b7f7f3ba2a4e05285e8dc.tar.gz
cpython-7ef49074123511003c8b7f7f3ba2a4e05285e8dc.zip
gh-128262: Allow specialization of calls to classes with __slots__ (GH-128263)
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r--Python/generated_cases.c.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index bed16b60b76..98743c27c38 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -1048,13 +1048,17 @@
DEOPT_IF(!PyType_Check(callable_o), CALL);
PyTypeObject *tp = (PyTypeObject *)callable_o;
DEOPT_IF(FT_ATOMIC_LOAD_UINT32_RELAXED(tp->tp_version_tag) != type_version, CALL);
- assert(tp->tp_flags & Py_TPFLAGS_INLINE_VALUES);
+ assert(tp->tp_new == PyBaseObject_Type.tp_new);
+ assert(tp->tp_flags & Py_TPFLAGS_HEAPTYPE);
+ assert(tp->tp_alloc == PyType_GenericAlloc);
PyHeapTypeObject *cls = (PyHeapTypeObject *)callable_o;
PyFunctionObject *init_func = (PyFunctionObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(cls->_spec_cache.init);
PyCodeObject *code = (PyCodeObject *)init_func->func_code;
DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize + _Py_InitCleanup.co_framesize), CALL);
STAT_INC(CALL, hit);
- PyObject *self_o = _PyType_NewManagedObject(tp);
+ _PyFrame_SetStackPointer(frame, stack_pointer);
+ PyObject *self_o = PyType_GenericAlloc(tp, 0);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
if (self_o == NULL) {
goto error;
}