summaryrefslogtreecommitdiffstats
path: root/Modules/_testcapi
diff options
context:
space:
mode:
authorPetr Viktorin <encukou@gmail.com>2023-06-12 15:45:49 (GMT)
committerGitHub <noreply@github.com>2023-06-12 15:45:49 (GMT)
commit2b90796be6959d5ef46b38c434a514fce25be971 (patch)
tree6b4f0c83e850c385c50b9ba79cd4522ac76a5350 /Modules/_testcapi
parent58f0bda34126ed790000451874b96140737f40ed (diff)
downloadcpython-2b90796be6959d5ef46b38c434a514fce25be971.zip
cpython-2b90796be6959d5ef46b38c434a514fce25be971.tar.gz
cpython-2b90796be6959d5ef46b38c434a514fce25be971.tar.bz2
gh-103968: PyType_FromMetaclass: Allow metaclasses with tp_new=NULL (GH-105386)
Diffstat (limited to 'Modules/_testcapi')
-rw-r--r--Modules/_testcapi/heaptype.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/Modules/_testcapi/heaptype.c b/Modules/_testcapi/heaptype.c
index 565ab57..c124871 100644
--- a/Modules/_testcapi/heaptype.c
+++ b/Modules/_testcapi/heaptype.c
@@ -744,6 +744,12 @@ static PyType_Spec HeapCTypeMetaclassCustomNew_spec = {
HeapCTypeMetaclassCustomNew_slots
};
+static PyType_Spec HeapCTypeMetaclassNullNew_spec = {
+ .name = "_testcapi.HeapCTypeMetaclassNullNew",
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
+ .slots = empty_type_slots
+};
+
typedef struct {
PyObject_HEAD
@@ -1231,6 +1237,13 @@ _PyTestCapi_Init_Heaptype(PyObject *m) {
}
PyModule_AddObject(m, "HeapCTypeMetaclassCustomNew", HeapCTypeMetaclassCustomNew);
+ PyObject *HeapCTypeMetaclassNullNew = PyType_FromMetaclass(
+ &PyType_Type, m, &HeapCTypeMetaclassNullNew_spec, (PyObject *) &PyType_Type);
+ if (HeapCTypeMetaclassNullNew == NULL) {
+ return -1;
+ }
+ PyModule_AddObject(m, "HeapCTypeMetaclassNullNew", HeapCTypeMetaclassNullNew);
+
PyObject *HeapCCollection = PyType_FromMetaclass(
NULL, m, &HeapCCollection_spec, NULL);
if (HeapCCollection == NULL) {