bpo-39481: Make weakref and WeakSet generic (GH-19497)

This commit is contained in:
Ethan Smith 2020-04-13 21:54:40 -07:00 committed by GitHub
parent cecf049673
commit 8ef875028a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 1 deletions

View file

@ -3,6 +3,7 @@
# by abc.py to load everything else at startup.
from _weakref import ref
from types import GenericAlias
__all__ = ['WeakSet']
@ -197,3 +198,5 @@ def isdisjoint(self, other):
def __repr__(self):
return repr(self.data)
__class_getitem__ = classmethod(GenericAlias)

View file

@ -33,6 +33,7 @@
from urllib.parse import SplitResult, ParseResult
from unittest.case import _AssertRaisesContext
from queue import Queue, SimpleQueue
from weakref import WeakSet, ReferenceType, ref
import typing
from typing import TypeVar
@ -73,6 +74,7 @@ def test_subscriptable(self):
Array, LibraryLoader,
SplitResult, ParseResult,
ValueProxy, ApplyResult,
WeakSet, ReferenceType, ref,
ShareableList, SimpleQueue,
Future, _WorkItem,
Morsel,

View file

@ -362,6 +362,12 @@ static PyMemberDef weakref_members[] = {
{NULL} /* Sentinel */
};
static PyMethodDef weakref_methods[] = {
{"__class_getitem__", (PyCFunction)Py_GenericAlias,
METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
{NULL} /* Sentinel */
};
PyTypeObject
_PyWeakref_RefType = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
@ -392,7 +398,7 @@ _PyWeakref_RefType = {
0, /*tp_weaklistoffset*/
0, /*tp_iter*/
0, /*tp_iternext*/
0, /*tp_methods*/
weakref_methods, /*tp_methods*/
weakref_members, /*tp_members*/
0, /*tp_getset*/
0, /*tp_base*/