mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
bpo-42332: Add weakref slot to types.GenericAlias (GH-23250)
Automerge-Triggered-By: GH:gvanrossum
This commit is contained in:
parent
c272d40e5b
commit
384b7a4bd9
3 changed files with 55 additions and 38 deletions
|
|
@ -10,6 +10,7 @@ typedef struct {
|
|||
PyObject *origin;
|
||||
PyObject *args;
|
||||
PyObject *parameters;
|
||||
PyObject* weakreflist;
|
||||
} gaobject;
|
||||
|
||||
static void
|
||||
|
|
@ -18,6 +19,9 @@ ga_dealloc(PyObject *self)
|
|||
gaobject *alias = (gaobject *)self;
|
||||
|
||||
_PyObject_GC_UNTRACK(self);
|
||||
if (alias->weakreflist != NULL) {
|
||||
PyObject_ClearWeakRefs((PyObject *)alias);
|
||||
}
|
||||
Py_XDECREF(alias->origin);
|
||||
Py_XDECREF(alias->args);
|
||||
Py_XDECREF(alias->parameters);
|
||||
|
|
@ -599,6 +603,7 @@ PyTypeObject Py_GenericAliasType = {
|
|||
.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
|
||||
.tp_traverse = ga_traverse,
|
||||
.tp_richcompare = ga_richcompare,
|
||||
.tp_weaklistoffset = offsetof(gaobject, weakreflist),
|
||||
.tp_methods = ga_methods,
|
||||
.tp_members = ga_members,
|
||||
.tp_alloc = PyType_GenericAlloc,
|
||||
|
|
@ -630,6 +635,7 @@ Py_GenericAlias(PyObject *origin, PyObject *args)
|
|||
alias->origin = origin;
|
||||
alias->args = args;
|
||||
alias->parameters = NULL;
|
||||
alias->weakreflist = NULL;
|
||||
_PyObject_GC_TRACK(alias);
|
||||
return (PyObject *)alias;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue