| // Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| // This code is not run directly. It needs to be compiled to dex code. | |
| // 'switches.dex' is what is run. | |
| package switches; | |
| class Switches { | |
| public static void packedSwitch(int value) { | |
| System.out.print("packedSwitch cases: "); | |
| switch (value) { | |
| case 0: | |
| System.out.print("0 "); | |
| case 1: | |
| case 2: | |
| System.out.print("1 2 "); | |
| break; | |
| case 3: | |
| System.out.print("3 "); | |
| break; | |
| } | |
| System.out.println("after switch " + value); | |
| } | |
| public static void sparseSwitch(int value) { | |
| switch (value) { | |
| case 0: | |
| System.out.println("0 "); | |
| case 100: | |
| System.out.println("100 "); | |
| break; | |
| case 200: | |
| System.out.println("200 "); | |
| break; | |
| } | |
| System.out.println("after switch " + value); | |
| } | |
| public static void switchWithLocals(int value) { | |
| switch (value) { | |
| case 0: { | |
| int i = 42; | |
| System.out.println(" " + i + value); | |
| break; | |
| } | |
| case 2: { | |
| double d = 1.0; | |
| System.out.println(" " + d + value); | |
| break; | |
| } | |
| } | |
| } | |
| public static void maybePackedSwitch(int value) { | |
| switch (value) { | |
| case 0: | |
| case 1: | |
| case 2: | |
| case 3: | |
| case 4: | |
| case 5: | |
| case 6: | |
| case 7: | |
| case 8: | |
| case 10: | |
| case 11: | |
| case 12: | |
| case 13: | |
| case 14: | |
| case 15: | |
| case 16: | |
| case 17: | |
| case 18: | |
| case 19: | |
| case 20: | |
| case 21: | |
| System.out.print("0-21 "); | |
| break; | |
| case 60: | |
| System.out.print("60 "); | |
| break; | |
| } | |
| System.out.println("after switch " + value); | |
| } | |
| public static void main(String[] args) { | |
| packedSwitch(0); | |
| packedSwitch(1); | |
| packedSwitch(2); | |
| packedSwitch(-1); // No such case, use fallthrough. | |
| sparseSwitch(0); | |
| sparseSwitch(100); | |
| sparseSwitch(200); | |
| sparseSwitch(-1); // No such case, use fallthrough. | |
| switchWithLocals(0); | |
| switchWithLocals(2); | |
| maybePackedSwitch(1); | |
| maybePackedSwitch(10); | |
| maybePackedSwitch(40); // Fallthrough. | |
| maybePackedSwitch(60); | |
| } | |
| } |