From 665b630b8480230c0aefbd349e70b8fb1c1b604d Mon Sep 17 00:00:00 2001 From: "Kim, YeonWoo" Date: Sat, 9 Jul 2022 15:19:53 +0900 Subject: [PATCH 1/4] Fix is_unionable type_type check type-type subclass identifying Co-Authored-By: Hyunmin Shin --- vm/src/builtins/union.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/src/builtins/union.rs b/vm/src/builtins/union.rs index 813974b53c..58d9ae4dc8 100644 --- a/vm/src/builtins/union.rs +++ b/vm/src/builtins/union.rs @@ -104,7 +104,7 @@ impl PyUnion { pub fn is_unionable(obj: PyObjectRef, vm: &VirtualMachine) -> bool { obj.class().is(vm.ctx.types.none_type) - || obj.class().is(vm.ctx.types.type_type) + || obj.payload_if_subclass::(vm).is_some() || obj.class().is(vm.ctx.types.generic_alias_type) || obj.class().is(vm.ctx.types.union_type) } From e7a3d503ca441ef7783d5b620946345727b62aac Mon Sep 17 00:00:00 2001 From: "Kim, YeonWoo" Date: Sat, 9 Jul 2022 16:09:06 +0900 Subject: [PATCH 2/4] Fix test_types --- Lib/test/test_types.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index ef6ddf617d..9961442075 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -728,8 +728,6 @@ def test_instancecheck(self): self.assertIsInstance({}, x) self.assertTrue(issubclass(dict, x)) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_bad_instancecheck(self): class BadMeta(type): def __instancecheck__(cls, inst): @@ -738,8 +736,6 @@ def __instancecheck__(cls, inst): self.assertTrue(isinstance(1, x)) self.assertRaises(ZeroDivisionError, isinstance, [], x) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_bad_subclasscheck(self): class BadMeta(type): def __subclasscheck__(cls, sub): From f09be0a0b8f2020b3018295340a7a90c631feaa3 Mon Sep 17 00:00:00 2001 From: "Kim, YeonWoo" Date: Sat, 9 Jul 2022 16:39:52 +0900 Subject: [PATCH 3/4] Fix test_types.py --- Lib/test/test_types.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 9961442075..586b32629c 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -728,6 +728,8 @@ def test_instancecheck(self): self.assertIsInstance({}, x) self.assertTrue(issubclass(dict, x)) + TODO: RUSTPYTHON + @unittest.expectedFailure def test_bad_instancecheck(self): class BadMeta(type): def __instancecheck__(cls, inst): @@ -736,6 +738,8 @@ def __instancecheck__(cls, inst): self.assertTrue(isinstance(1, x)) self.assertRaises(ZeroDivisionError, isinstance, [], x) + TODO: RUSTPYTHON + @unittest.expectedFailure def test_bad_subclasscheck(self): class BadMeta(type): def __subclasscheck__(cls, sub): @@ -864,8 +868,6 @@ def forward_before(x: ForwardBefore[int]) -> None: ... assert typing.get_args(typing.get_type_hints(forward_after)['x']) == (int, Forward) assert typing.get_args(typing.get_type_hints(forward_before)['x']) == (int, Forward) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_or_type_operator_with_Protocol(self): class Proto(typing.Protocol): def meth(self) -> int: @@ -880,8 +882,6 @@ def test_or_type_operator_with_NamedTuple(self): NT=namedtuple('A', ['B', 'C', 'D']) assert NT | str == typing.Union[NT,str] - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_or_type_operator_with_TypedDict(self): class Point2D(typing.TypedDict): x: int From 2767475068b4276e014fbf331f6a018b97587d61 Mon Sep 17 00:00:00 2001 From: "Kim, YeonWoo" Date: Sat, 9 Jul 2022 17:10:28 +0900 Subject: [PATCH 4/4] Fix test_types.py --- Lib/test/test_types.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 586b32629c..d314387d60 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -728,7 +728,7 @@ def test_instancecheck(self): self.assertIsInstance({}, x) self.assertTrue(issubclass(dict, x)) - TODO: RUSTPYTHON + # TODO: RUSTPYTHON @unittest.expectedFailure def test_bad_instancecheck(self): class BadMeta(type): @@ -738,7 +738,7 @@ def __instancecheck__(cls, inst): self.assertTrue(isinstance(1, x)) self.assertRaises(ZeroDivisionError, isinstance, [], x) - TODO: RUSTPYTHON + # TODO: RUSTPYTHON @unittest.expectedFailure def test_bad_subclasscheck(self): class BadMeta(type):