// Declare a user enum. enum class E { kZero = 0, kOne = 1, kTwo = 2, kThree = 3 }; void main() { // Test that the user enum is subject to the same optimizations as a plain int. E e = E::kZero; if (e == E::kZero) { sk_FragColor = half4(1); } @if (e == E::kZero) { sk_FragColor = half4(2); } @if (e != E::kZero) { sk_FragColor = half4(3); } if (e == E::kOne) { sk_FragColor = half4(4); } @if (e == E::kOne) { sk_FragColor = half4(5); } @if (e != E::kOne) { sk_FragColor = half4(6); } sk_FragColor = (e == E::kZero) ? half4(7) : half4(-7); sk_FragColor = (e != E::kZero) ? half4(8) : half4(-8); sk_FragColor = (e == E::kOne) ? half4(9) : half4(-9); sk_FragColor = (e != E::kOne) ? half4(10) : half4(-10); switch (e) { case E::kZero: sk_FragColor = half4(11); break; case E::kOne: sk_FragColor = half4(12); break; } @switch (e) { case E::kZero: sk_FragColor = half4(13); break; case E::kOne: sk_FragColor = half4(14); break; } // Test that built-in enums work equally well. SkBlendMode m = SkBlendMode::kClear; if (m == SkBlendMode::kClear) { sk_FragColor = half4(15); } @if (m == SkBlendMode::kClear) { sk_FragColor = half4(16); } if (m == SkBlendMode::kSrc) { sk_FragColor = half4(17); } @if (m != SkBlendMode::kDst) { sk_FragColor = half4(18); } sk_FragColor = (m == SkBlendMode::kClear) ? half4(19) : half4(-19); sk_FragColor = (m != SkBlendMode::kSrc) ? half4(20) : half4(-20); @switch (m) { case SkBlendMode::kClear: sk_FragColor = half4(21); break; case SkBlendMode::kSrc: sk_FragColor = half4(22); break; case SkBlendMode::kDst: sk_FragColor = half4(23); break; } }