@@ -966,14 +966,14 @@ 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" )},
972
973
{Py_tp_traverse , CDataType_traverse },
973
974
{Py_tp_clear , CDataType_clear },
974
975
{Py_tp_methods , CDataType_methods },
975
976
{Py_tp_new , UnionType_new },
976
- {Py_tp_base , & PyType_Type },
977
977
{0 , NULL },
978
978
};
979
979
@@ -4426,6 +4426,7 @@ static PyTypeObject Struct_Type = {
4426
4426
4427
4427
static PyType_Slot union_type_slots [] = {
4428
4428
{Py_bf_getbuffer , PyCData_NewGetBuffer },
4429
+ {Py_tp_doc , PyDoc_STR ("Union base class" )},
4429
4430
{Py_tp_traverse , PyCData_traverse },
4430
4431
{Py_tp_clear , PyCData_clear },
4431
4432
{Py_tp_init , Struct_init },
@@ -4436,7 +4437,8 @@ static PyType_Slot union_type_slots[] = {
4436
4437
static PyType_Spec union_type_spec = {
4437
4438
.name = "_ctypes.Union" ,
4438
4439
.basicsize = sizeof (CDataObject ),
4439
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC ,
4440
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
4441
+ Py_TPFLAGS_IMMUTABLETYPE ),
4440
4442
.slots = union_type_slots ,
4441
4443
};
4442
4444
@@ -5603,6 +5605,7 @@ _ctypes_add_types(PyObject *mod)
5603
5605
TYPE_READY_BASE (& PyCSimpleType_Type , & PyType_Type );
5604
5606
TYPE_READY_BASE (& PyCFuncPtrType_Type , & PyType_Type );
5605
5607
5608
+ union_type_type_slots [0 ].pfunc = & PyType_Type ;
5606
5609
st -> UnionType_Type = (PyTypeObject * )
5607
5610
PyType_FromModuleAndSpec (mod , & union_type_type_spec ,
5608
5611
NULL );
@@ -5759,6 +5762,7 @@ _ctypes_traverse(PyObject *mod, visitproc visit, void *arg)
5759
5762
{
5760
5763
_ctypes_state * st = _PyModule_GetState (mod );
5761
5764
Py_VISIT (st -> Union_Type );
5765
+ Py_VISIT (st -> UnionType_Type );
5762
5766
return 0 ;
5763
5767
}
5764
5768
@@ -5767,6 +5771,7 @@ _ctypes_clear(PyObject *mod)
5767
5771
{
5768
5772
_ctypes_state * st = _PyModule_GetState (mod );
5769
5773
Py_CLEAR (st -> Union_Type );
5774
+ Py_CLEAR (st -> UnionType_Type );
5770
5775
return 0 ;
5771
5776
}
5772
5777
0 commit comments