xref: /aosp_15_r20/external/skia/resources/sksl/shared/SwitchWithFallthroughAndVarDecls.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker/*#pragma settings RewriteSwitchStatements*/
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed;
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) {
6*c8dee2aaSAndroid Build Coastguard Worker    bool ok;
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Worker    switch (int(colorGreen.g)) {
9*c8dee2aaSAndroid Build Coastguard Worker        case 0:  bool a;             // `a` should be declared above the switch.
10*c8dee2aaSAndroid Build Coastguard Worker        case 1:  const int ONE = 1;  // a const-declaration can also move above the switch safely.
11*c8dee2aaSAndroid Build Coastguard Worker        case 2:  int b = ONE, c;     // declarations for `b` and `c` should be moved upwards;
12*c8dee2aaSAndroid Build Coastguard Worker                                     // an assignment-statement `b = ONE` should be here instead.
13*c8dee2aaSAndroid Build Coastguard Worker        case 3:  { float d = float(b); c = int(d); }  // no changes expected
14*c8dee2aaSAndroid Build Coastguard Worker        case 4:  a = bool(c);                         //  "      "       "
15*c8dee2aaSAndroid Build Coastguard Worker        case 5:  ok = a;                              //  "      "       "
16*c8dee2aaSAndroid Build Coastguard Worker    }
17*c8dee2aaSAndroid Build Coastguard Worker
18*c8dee2aaSAndroid Build Coastguard Worker    return ok ? colorGreen : colorRed;
19*c8dee2aaSAndroid Build Coastguard Worker}
20