|
1 | 1 | import contextlib |
2 | | -import enum |
3 | 2 | import itertools |
4 | 3 | import sys |
5 | 4 | import textwrap |
@@ -3512,50 +3511,6 @@ def f(n): |
3512 | 3511 | self.assertNotIn("_LOAD_ATTR_METHOD_NO_DICT", uops) |
3513 | 3512 | self.assertIn("_LOAD_CONST_INLINE_BORROW", uops) |
3514 | 3513 |
|
3515 | | - def test_load_attr_class_with_metaclass_check(self): |
3516 | | - # LOAD_ATTR_CLASS_WITH_METACLASS_CHECK must check |
3517 | | - # for `__class__` writes, see gh-149239 |
3518 | | - class ColorMeta(enum.EnumType): |
3519 | | - pass |
3520 | | - |
3521 | | - class Color(enum.IntEnum, metaclass=ColorMeta): |
3522 | | - RED = 1 |
3523 | | - |
3524 | | - red = Color.RED |
3525 | | - |
3526 | | - def f1(n): |
3527 | | - for _ in range(n): |
3528 | | - assert Color.RED == 1 |
3529 | | - return n |
3530 | | - |
3531 | | - res, ex = self._run_with_optimizer(f1, TIER2_THRESHOLD) |
3532 | | - self.assertIsNotNone(ex) |
3533 | | - self.assertEqual(res, TIER2_THRESHOLD) |
3534 | | - uops = get_opnames(ex) |
3535 | | - self.assertIn("_CHECK_ATTR_CLASS", uops) |
3536 | | - self.assertIn("_GUARD_TYPE_VERSION", uops) |
3537 | | - |
3538 | | - # Reassign the `__class__` attr to deopt: |
3539 | | - class Descriptor(enum.IntEnum): |
3540 | | - RED = 1 |
3541 | | - |
3542 | | - def __get__(self, obj, owner): |
3543 | | - return "descr" |
3544 | | - |
3545 | | - red.__class__ = Descriptor |
3546 | | - |
3547 | | - def f2(n): |
3548 | | - for _ in range(n): |
3549 | | - assert Color.RED == 'descr' |
3550 | | - return n |
3551 | | - |
3552 | | - res, ex = self._run_with_optimizer(f2, TIER2_THRESHOLD) |
3553 | | - self.assertIsNotNone(ex) |
3554 | | - self.assertEqual(res, TIER2_THRESHOLD) |
3555 | | - uops = get_opnames(ex) |
3556 | | - self.assertNotIn("_CHECK_ATTR_CLASS", uops) |
3557 | | - self.assertNotIn("_GUARD_TYPE_VERSION", uops) |
3558 | | - |
3559 | 3514 | def test_cached_load_special(self): |
3560 | 3515 | class CM: |
3561 | 3516 | def __enter__(self): |
|
0 commit comments