@@ -966,6 +966,7 @@ PyTypeObject PyCStructType_Type = {
966
966
};
967
967
968
968
static PyType_Slot union_type_type_slots [] = {
969
+ {Py_tp_base , NULL }, // filled out in module exec function
969
970
{Py_sq_repeat , CDataType_repeat },
970
971
{Py_tp_setattro , UnionType_setattro },
971
972
{Py_tp_doc , PyDoc_STR ("metatype for the CData Objects" )},
@@ -4426,6 +4427,7 @@ static PyTypeObject Struct_Type = {
4426
4427
4427
4428
static PyType_Slot union_type_slots [] = {
4428
4429
{Py_bf_getbuffer , PyCData_NewGetBuffer },
4430
+ {Py_tp_doc , PyDoc_STR ("Union base class" )},
4429
4431
{Py_tp_traverse , PyCData_traverse },
4430
4432
{Py_tp_clear , PyCData_clear },
4431
4433
{Py_tp_init , Struct_init },
@@ -4436,7 +4438,8 @@ static PyType_Slot union_type_slots[] = {
4436
4438
static PyType_Spec union_type_spec = {
4437
4439
.name = "_ctypes.Union" ,
4438
4440
.basicsize = sizeof (CDataObject ),
4439
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC ,
4441
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
4442
+ Py_TPFLAGS_IMMUTABLETYPE ),
4440
4443
.slots = union_type_slots ,
4441
4444
};
4442
4445
@@ -5603,6 +5606,7 @@ _ctypes_add_types(PyObject *mod)
5603
5606
TYPE_READY_BASE (& PyCSimpleType_Type , & PyType_Type );
5604
5607
TYPE_READY_BASE (& PyCFuncPtrType_Type , & PyType_Type );
5605
5608
5609
+ union_type_type_slots [0 ].pfunc = & PyType_Type ;
5606
5610
st -> UnionType_Type = (PyTypeObject * )
5607
5611
PyType_FromModuleAndSpec (mod , & union_type_type_spec ,
5608
5612
NULL );
@@ -5759,6 +5763,7 @@ _ctypes_traverse(PyObject *mod, visitproc visit, void *arg)
5759
5763
{
5760
5764
_ctypes_state * st = _PyModule_GetState (mod );
5761
5765
Py_VISIT (st -> Union_Type );
5766
+ Py_VISIT (st -> UnionType_Type );
5762
5767
return 0 ;
5763
5768
}
5764
5769
@@ -5767,6 +5772,7 @@ _ctypes_clear(PyObject *mod)
5767
5772
{
5768
5773
_ctypes_state * st = _PyModule_GetState (mod );
5769
5774
Py_CLEAR (st -> Union_Type );
5775
+ Py_CLEAR (st -> UnionType_Type );
5770
5776
return 0 ;
5771
5777
}
5772
5778
0 commit comments