Skip to content

Commit a5f0601

Browse files
committed
improve enum decompose
1 parent b4d0b39 commit a5f0601

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

Lib/enum.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -861,25 +861,28 @@ def _decompose(flag, value):
861861
# _decompose is only called if the value is not named
862862
not_covered = value
863863
negative = value < 0
864+
flags_to_check = flag
864865
# issue29167: wrap accesses to _value2member_map_ in a list to avoid race
865866
# conditions between iterating over it and having more pseudo-
866867
# members added to it
867868
if negative:
868869
# only check for named flags
869870
flags_to_check = [
870-
(m, v)
871-
for v, m in list(flag._value2member_map_.items())
871+
m
872+
for _, m in list(flag._value2member_map_.items())
872873
if m.name is not None
873874
]
874875
else:
875876
# check for named flags and powers-of-two flags
876-
flags_to_check = [
877-
(m, v)
878-
for v, m in list(flag._value2member_map_.items())
879-
if m.name is not None or _power_of_two(v)
877+
if issubclass(flag, IntFlag):
878+
flags_to_check = [
879+
m
880+
for v, m in list(flag._value2member_map_.items())
881+
if m.name is not None or _power_of_two(v)
880882
]
881883
members = []
882-
for member, member_value in flags_to_check:
884+
for member in flags_to_check:
885+
member_value = member.value
883886
if member_value and member_value & value == member_value:
884887
members.append(member)
885888
not_covered &= ~member_value

0 commit comments

Comments
 (0)