diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-07-15 07:25:22 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-15 07:25:22 (GMT) |
commit | cc1a47c849a206441c9b370b6ca954862a523082 (patch) | |
tree | 25abd46ff3472c10c83358d96ec9f6df5d3501f6 | |
parent | 6dec5255829a31826990ea40ca106cc496570df2 (diff) | |
download | cpython-cc1a47c849a206441c9b370b6ca954862a523082.zip cpython-cc1a47c849a206441c9b370b6ca954862a523082.tar.gz cpython-cc1a47c849a206441c9b370b6ca954862a523082.tar.bz2 |
bpo-44632: Fix support of TypeVar in the union type (GH-27139) (GH-27143)
int | TypeVar('T') returns now an instance of types.Union
instead of typing.Union.
(cherry picked from commit a158b20019b50e3ece6e4743ec4e6ae8d818b690)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
-rw-r--r-- | Lib/test/test_types.py | 8 | ||||
-rw-r--r-- | Objects/unionobject.c | 2 |
2 files changed, 8 insertions, 2 deletions
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 5254d58..3f76771 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -759,6 +759,7 @@ class TypesTests(unittest.TestCase): assert repr(int | None) == "int | None" assert repr(int | type(None)) == "int | None" assert repr(int | typing.GenericAlias(list, int)) == "int | list[int]" + assert repr(int | typing.TypeVar('T')) == "int | ~T" def test_or_type_operator_with_genericalias(self): a = list[int] @@ -795,13 +796,18 @@ class TypesTests(unittest.TestCase): issubclass(int, type_) def test_or_type_operator_with_bad_module(self): - class TypeVar: + class BadMeta(type): + __qualname__ = 'TypeVar' @property def __module__(self): 1 / 0 + TypeVar = BadMeta('TypeVar', (), {}) + _SpecialForm = BadMeta('_SpecialForm', (), {}) # Crashes in Issue44483 with self.assertRaises(ZeroDivisionError): str | TypeVar() + with self.assertRaises(ZeroDivisionError): + str | _SpecialForm() @cpython_only def test_or_type_operator_reference_cycle(self): diff --git a/Objects/unionobject.c b/Objects/unionobject.c index 98db27d..229b518 100644 --- a/Objects/unionobject.c +++ b/Objects/unionobject.c @@ -124,7 +124,7 @@ is_typing_name(PyObject *obj, char *name) if (strcmp(type->tp_name, name) != 0) { return 0; } - return is_typing_module(obj); + return is_typing_module((PyObject *)type); } static PyObject * |