--- /dev/null
+:mod:`tkinter`: the types :class:`!_tkinter.Tcl_Obj` (wrapper for Tcl objects),
+:class:`!_tkinter.tktimertoken` (obtained by calling ``createtimerhandler()``
+on a :attr:`Tk <tkinter.Tk.tk>` application) and :class:`!_tkinter.tkapp`
+(the runtime type of Tk applications) are now immutable.
+Patch by Bénédikt Tran.
--- /dev/null
+:mod:`os`: the :class:`os.DirEntry` type and the type of :func:`os.scandir`
+are now immutable. Patch by Bénédikt Tran.
--- /dev/null
+:mod:`zlib`: the types of :func:`zlib.compressobj`
+and :func:`zlib.decompressobj` are now immutable.
+Patch by Bénédikt Tran.
--- /dev/null
+:mod:`curses.panel`: the type of :func:`curses.panel.new_panel` is now
+immutable. Patch by Bénédikt Tran.
.flags = (
Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_DISALLOW_INSTANTIATION
+ | Py_TPFLAGS_IMMUTABLETYPE
| Py_TPFLAGS_HAVE_GC
),
.slots = PyCursesPanel_Type_slots
static PyType_Spec RemoteUnwinder_spec = {
.name = "_remote_debugging.RemoteUnwinder",
.basicsize = sizeof(RemoteUnwinderObject),
- .flags = Py_TPFLAGS_DEFAULT,
+ .flags = (
+ Py_TPFLAGS_DEFAULT
+ | Py_TPFLAGS_IMMUTABLETYPE
+ ),
.slots = RemoteUnwinder_slots,
};
};
static PyType_Spec PyTclObject_Type_spec = {
- "_tkinter.Tcl_Obj",
- sizeof(PyTclObject),
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
- PyTclObject_Type_slots,
+ .name = "_tkinter.Tcl_Obj",
+ .basicsize = sizeof(PyTclObject),
+ .flags = (
+ Py_TPFLAGS_DEFAULT
+ | Py_TPFLAGS_DISALLOW_INSTANTIATION
+ | Py_TPFLAGS_IMMUTABLETYPE
+ ),
+ .slots = PyTclObject_Type_slots,
};
};
static PyType_Spec Tktt_Type_spec = {
- "_tkinter.tktimertoken",
- sizeof(TkttObject),
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
- Tktt_Type_slots,
+ .name = "_tkinter.tktimertoken",
+ .basicsize = sizeof(TkttObject),
+ .flags = (
+ Py_TPFLAGS_DEFAULT
+ | Py_TPFLAGS_DISALLOW_INSTANTIATION
+ | Py_TPFLAGS_IMMUTABLETYPE
+ ),
+ .slots = Tktt_Type_slots,
};
static PyType_Spec Tkapp_Type_spec = {
- "_tkinter.tkapp",
- sizeof(TkappObject),
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
- Tkapp_Type_slots,
+ .name = "_tkinter.tkapp",
+ .basicsize = sizeof(TkappObject),
+ .flags = (
+ Py_TPFLAGS_DEFAULT
+ | Py_TPFLAGS_DISALLOW_INSTANTIATION
+ | Py_TPFLAGS_IMMUTABLETYPE
+ ),
+ .slots = Tkapp_Type_slots,
};
static PyMethodDef moduleMethods[] =
};
static PyType_Spec DirEntryType_spec = {
- MODNAME ".DirEntry",
- sizeof(DirEntry),
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
- DirEntryType_slots
+ .name = MODNAME ".DirEntry",
+ .basicsize = sizeof(DirEntry),
+ .flags = (
+ Py_TPFLAGS_DEFAULT
+ | Py_TPFLAGS_DISALLOW_INSTANTIATION
+ | Py_TPFLAGS_IMMUTABLETYPE
+ ),
+ .slots = DirEntryType_slots
};
};
static PyType_Spec ScandirIteratorType_spec = {
- MODNAME ".ScandirIterator",
- sizeof(ScandirIterator),
- 0,
+ .name = MODNAME ".ScandirIterator",
+ .basicsize = sizeof(ScandirIterator),
// bpo-40549: Py_TPFLAGS_BASETYPE should not be used, since
// PyType_GetModule(Py_TYPE(self)) doesn't work on a subclass instance.
- (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_FINALIZE
- | Py_TPFLAGS_DISALLOW_INSTANTIATION),
- ScandirIteratorType_slots
+ .flags = (
+ Py_TPFLAGS_DEFAULT
+ | Py_TPFLAGS_HAVE_FINALIZE
+ | Py_TPFLAGS_DISALLOW_INSTANTIATION
+ | Py_TPFLAGS_IMMUTABLETYPE
+ ),
+ .slots = ScandirIteratorType_slots
};
/*[clinic input]
.flags = (
Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_DISALLOW_INSTANTIATION
+ | Py_TPFLAGS_IMMUTABLETYPE
| Py_TPFLAGS_HAVE_GC
),
.slots= Comptype_slots,
.flags = (
Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_DISALLOW_INSTANTIATION
+ | Py_TPFLAGS_IMMUTABLETYPE
| Py_TPFLAGS_HAVE_GC
),
.slots = Decomptype_slots,