@@ -62,12 +62,15 @@ def MyEnum64 : I64EnumAttr<"MyEnum64", "An example 64-bit enum", [One64, Two64]>
62
62
// CHECK: def _myenum64(x, context):
63
63
// CHECK: return _ods_ir.IntegerAttr.get(_ods_ir.IntegerType.get_signless(64, context=context), int(x))
64
64
65
+ def User : I32BitEnumAttrCaseBit<"User", 0, "user">;
66
+ def Group : I32BitEnumAttrCaseBit<"Group", 1, "group">;
67
+ def Other : I32BitEnumAttrCaseBit<"Other", 2, "other">;
68
+
65
69
def TestBitEnum
66
- : I32BitEnumAttr<"TestBitEnum", "", [
67
- I32BitEnumAttrCaseBit<"User", 0, "user">,
68
- I32BitEnumAttrCaseBit<"Group", 1, "group">,
69
- I32BitEnumAttrCaseBit<"Other", 2, "other">,
70
- ]> {
70
+ : I32BitEnumAttr<
71
+ "TestBitEnum", "",
72
+ [User, Group, Other,
73
+ I32BitEnumAttrCaseGroup<"Any", [User, Group, Other], "any">]> {
71
74
let genSpecializedAttr = 0;
72
75
let separator = " | ";
73
76
}
@@ -79,9 +82,10 @@ def TestBitEnum_Attr : EnumAttr<Test_Dialect, TestBitEnum, "testbitenum">;
79
82
// CHECK: User = 1
80
83
// CHECK: Group = 2
81
84
// CHECK: Other = 4
85
+ // CHECK: Any = 7
82
86
83
87
// CHECK: def __iter__(self):
84
- // CHECK: return iter([case for case in type(self) if (self & case) is case])
88
+ // CHECK: return iter([case for case in type(self) if (self & case) is case and self is not case ])
85
89
// CHECK: def __len__(self):
86
90
// CHECK: return bin(self).count("1")
87
91
@@ -94,6 +98,8 @@ def TestBitEnum_Attr : EnumAttr<Test_Dialect, TestBitEnum, "testbitenum">;
94
98
// CHECK: return "group"
95
99
// CHECK: if self is TestBitEnum.Other:
96
100
// CHECK: return "other"
101
+ // CHECK: if self is TestBitEnum.Any:
102
+ // CHECK: return "any"
97
103
// CHECK: raise ValueError("Unknown TestBitEnum enum entry.")
98
104
99
105
// CHECK: @register_attribute_builder("TestBitEnum")
0 commit comments