From 543de9933d9e784ccf7531bdfd48379d71a405da Mon Sep 17 00:00:00 2001 From: Advait Dixit Date: Fri, 22 Nov 2024 21:36:30 -0800 Subject: [PATCH 1/2] [mypyc] Fixing check if enum classes. --- mypyc/irbuild/classdef.py | 2 +- mypyc/test-data/run-classes.test | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/mypyc/irbuild/classdef.py b/mypyc/irbuild/classdef.py index 590bd12ce7b3b..ecc6435c4f57b 100644 --- a/mypyc/irbuild/classdef.py +++ b/mypyc/irbuild/classdef.py @@ -682,7 +682,7 @@ def add_non_ext_class_attr( # are final. if ( cdef.info.bases - and cdef.info.bases[0].type.fullname == "enum.Enum" + and cdef.info.bases[0].type.is_enum # Skip these since Enum will remove it and lvalue.name not in EXCLUDED_ENUM_ATTRIBUTES ): diff --git a/mypyc/test-data/run-classes.test b/mypyc/test-data/run-classes.test index 6f58125a11132..d76974f7d83e8 100644 --- a/mypyc/test-data/run-classes.test +++ b/mypyc/test-data/run-classes.test @@ -2619,3 +2619,15 @@ def test_final_attribute() -> None: assert C.a['x'] == 'y' assert C.b['x'] == 'y' assert C.a is C.b + +[case testClassDerivedFromIntEnum] +from enum import IntEnum, auto + +class Player(IntEnum): + MIN = auto() + +print(f'{Player.MIN = }') +[file driver.py] +from native import Player +[out] +Player.MIN = From 5bc852d157b24f1ec6393c4f70ba002fa9c05616 Mon Sep 17 00:00:00 2001 From: Advait Dixit Date: Sun, 24 Nov 2024 18:19:33 -0800 Subject: [PATCH 2/2] Fixing base classes sent to __prepare__. --- mypyc/irbuild/classdef.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypyc/irbuild/classdef.py b/mypyc/irbuild/classdef.py index ecc6435c4f57b..5fd55ff4b5a46 100644 --- a/mypyc/irbuild/classdef.py +++ b/mypyc/irbuild/classdef.py @@ -513,7 +513,7 @@ def populate_non_ext_bases(builder: IRBuilder, cdef: ClassDef) -> Value: is_named_tuple = cdef.info.is_named_tuple ir = builder.mapper.type_to_ir[cdef.info] bases = [] - for cls in cdef.info.mro[1:]: + for cls in (b.type for b in cdef.info.bases): if cls.fullname == "builtins.object": continue if is_named_tuple and cls.fullname in (