test/langtools/tools/javac/switchexpr/TryCatch.java
author jlahoda
Tue, 12 Nov 2019 06:32:13 +0000
changeset 59021 cfc7bb9a5a92
parent 55306 ea43db53de91
permissions -rw-r--r--
8232684: Make switch expressions final Reviewed-by: alanb, mcimadamore, kvn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
     1
/*
53878
4584d0331318 8219254: Update explicit uses of latest source/target in langtools tests to a property
darcy
parents: 53023
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
     4
 *
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
     7
 * published by the Free Software Foundation.
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
     8
 *
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    13
 * accompanied this code).
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    14
 *
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    18
 *
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    21
 * questions.
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    22
 */
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    23
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    24
/**
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    25
 * @test
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    26
 * @bug 8214114
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    27
 * @summary Verify try-catch inside a switch expression works properly.
59021
cfc7bb9a5a92 8232684: Make switch expressions final
jlahoda
parents: 55306
diff changeset
    28
 * @compile TryCatch.java
cfc7bb9a5a92 8232684: Make switch expressions final
jlahoda
parents: 55306
diff changeset
    29
 * @run main TryCatch
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    30
 */
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    31
public class TryCatch {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    32
    public static void main(String[] args) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    33
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    34
            int val = 3;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    35
            for (int p : new int[] {0, 1, 2}) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    36
                int res = 1 + new TryCatch().id(switch(p) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    37
                    case 0 -> switch (p + 1) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    38
                        case 1:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    39
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    40
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    41
                                yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    42
                            } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    43
                                yield val;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    44
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    45
                        default: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    46
                    };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    47
                    case 1 -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    48
                        try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    49
                            yield new TryCatch().id(switch (p + 1) {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    50
                                case 2:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    51
                                    try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    52
                                        new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    53
                                        yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    54
                                    } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    55
                                        throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    56
                                    }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    57
                                default: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    58
                            });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    59
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    60
                            yield val;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    61
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    62
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    63
                    default -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    64
                        try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    65
                            new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    66
                            yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    67
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    68
                            yield val;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    69
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    70
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    71
                } - 1);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    72
                if (res != 3) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    73
                    throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    74
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    75
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    76
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    77
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    78
            int val = 3;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    79
            for (int p : new int[] {0, 1, 2}) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    80
                int x;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    81
                int res = new TryCatch().id(val == 3 && switch(p) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    82
                    case 0 -> switch (p + 1) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    83
                        case 1:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    84
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    85
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    86
                                yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    87
                            } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    88
                                yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    89
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    90
                        default: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    91
                    };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    92
                    case 1 -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    93
                        try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    94
                            yield new TryCatch().id(switch (p + 1) {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    95
                                case 2:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    96
                                    try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    97
                                        new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
    98
                                        yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
    99
                                    } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   100
                                        throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   101
                                    }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   102
                                default: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   103
                            });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   104
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   105
                            yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   106
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   107
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   108
                    default -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   109
                        try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   110
                            new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   111
                            yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   112
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   113
                            yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   114
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   115
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   116
                } && (x = 1) == 1 && x == 1 ? val : -1);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   117
                if (res != 3) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   118
                    throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   119
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   120
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   121
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   122
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   123
            int val = 3;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   124
            for (E e : new E[] {E.A, E.B, E.C}) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   125
                int res = 1 + new TryCatch().id(switch(e) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   126
                    case A -> switch (e.next()) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   127
                        case B:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   128
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   129
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   130
                                yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   131
                            } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   132
                                yield val;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   133
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   134
                        default: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   135
                    };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   136
                    case B -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   137
                        try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   138
                            yield new TryCatch().id(switch (e.next()) {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   139
                                case C:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   140
                                    try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   141
                                        new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   142
                                        yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   143
                                    } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   144
                                        throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   145
                                    }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   146
                                default: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   147
                            });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   148
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   149
                            yield val;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   150
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   151
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   152
                    default -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   153
                        try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   154
                            new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   155
                            yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   156
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   157
                            yield val;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   158
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   159
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   160
                } - 1);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   161
                if (res != 3) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   162
                    throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   163
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   164
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   165
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   166
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   167
            int val = 3;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   168
            for (E e : new E[] {E.A, E.B, E.C}) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   169
                int x;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   170
                int res = new TryCatch().id(val == 3 && switch(e) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   171
                    case A -> switch (e.next()) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   172
                        case B:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   173
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   174
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   175
                                yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   176
                            } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   177
                                yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   178
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   179
                        default: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   180
                    };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   181
                    case B -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   182
                        try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   183
                            yield new TryCatch().id(switch (e.next()) {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   184
                                case C:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   185
                                    try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   186
                                        new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   187
                                        yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   188
                                    } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   189
                                        throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   190
                                    }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   191
                                default: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   192
                            });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   193
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   194
                            yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   195
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   196
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   197
                    default -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   198
                        try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   199
                            new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   200
                            yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   201
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   202
                            yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   203
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   204
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   205
                } && (x = 1) == 1 && x == 1 ? val : -1);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   206
                if (res != 3) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   207
                    throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   208
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   209
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   210
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   211
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   212
            int val = 3;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   213
            for (String s : new String[] {"", "a", "b"}) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   214
                int res = 1 + new TryCatch().id(switch(s) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   215
                    case "" -> switch (s + "c") {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   216
                        case "c":
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   217
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   218
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   219
                                yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   220
                            } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   221
                                yield val;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   222
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   223
                        default: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   224
                    };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   225
                    case "a" -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   226
                        try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   227
                            yield new TryCatch().id(switch (s + "c") {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   228
                                case "ac":
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   229
                                    try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   230
                                        new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   231
                                        yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   232
                                    } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   233
                                        throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   234
                                    }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   235
                                default: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   236
                            });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   237
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   238
                            yield val;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   239
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   240
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   241
                    default -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   242
                        try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   243
                            new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   244
                            yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   245
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   246
                            yield val;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   247
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   248
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   249
                } - 1);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   250
                if (res != 3) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   251
                    throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   252
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   253
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   254
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   255
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   256
            int val = 3;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   257
            for (String s : new String[] {"", "a", "b"}) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   258
                int x;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   259
                int res = new TryCatch().id(val == 3 && switch(s) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   260
                    case "" -> switch (s + "c") {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   261
                        case "c":
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   262
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   263
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   264
                                yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   265
                            } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   266
                                yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   267
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   268
                        default: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   269
                    };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   270
                    case "a" -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   271
                        try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   272
                            yield new TryCatch().id(switch (s + "c") {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   273
                                case "ac":
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   274
                                    try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   275
                                        new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   276
                                        yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   277
                                    } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   278
                                        throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   279
                                    }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   280
                                default: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   281
                            });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   282
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   283
                            yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   284
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   285
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   286
                    default -> {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   287
                        try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   288
                            new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   289
                            yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   290
                        } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   291
                            yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   292
                        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   293
                    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   294
                } && (x = 1) == 1 && x == 1 ? val : -1);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   295
                if (res != 3) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   296
                    throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   297
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   298
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   299
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   300
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   301
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   302
            int res = new FieldHolder().intTest;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   303
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   304
            if (res != 3) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   305
                throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   306
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   307
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   308
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   309
            int res = FieldHolder.intStaticTest;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   310
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   311
            if (res != 3) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   312
                throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   313
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   314
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   315
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   316
            boolean res = new FieldHolder().booleanTest;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   317
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   318
            if (!res) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   319
                throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   320
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   321
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   322
        {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   323
            boolean res = FieldHolder.booleanStaticTest;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   324
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   325
            if (!res) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   326
                throw new AssertionError("Unexpected result: " + res);
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   327
            }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   328
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   329
    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   330
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   331
    static class FieldHolder {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   332
        private final int intTest = switch (0) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   333
            case -1: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   334
            default:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   335
                try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   336
                    yield new TryCatch().id(switch (2) {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   337
                        case 2:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   338
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   339
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   340
                                yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   341
                            } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   342
                                throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   343
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   344
                        default: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   345
                    });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   346
                } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   347
                    yield 3;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   348
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   349
        };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   350
        private static final int intStaticTest = switch (0) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   351
            case -1: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   352
            default:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   353
                try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   354
                    yield new TryCatch().id(switch (2) {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   355
                        case 2:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   356
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   357
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   358
                                yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   359
                            } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   360
                                throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   361
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   362
                        default: yield -1;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   363
                    });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   364
                } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   365
                    yield 3;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   366
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   367
        };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   368
        private final boolean booleanTest = switch (0) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   369
            case -1: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   370
            default:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   371
                try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   372
                    yield new TryCatch().id(switch (2) {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   373
                        case 2:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   374
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   375
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   376
                                yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   377
                            } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   378
                                throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   379
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   380
                        default: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   381
                    });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   382
                } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   383
                    yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   384
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   385
        };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   386
        private static final boolean booleanStaticTest = switch (0) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   387
            case -1: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   388
            default:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   389
                try {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   390
                    yield new TryCatch().id(switch (2) {
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   391
                        case 2:
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   392
                            try {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   393
                                new TryCatch().throwException();
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   394
                                yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   395
                            } catch(Throwable ex) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   396
                                throw ex;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   397
                            }
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   398
                        default: yield false;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   399
                    });
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   400
                } catch(Throwable ex) {
55306
ea43db53de91 8223305: Compiler support for Switch Expressions
jlahoda
parents: 53878
diff changeset
   401
                    yield true;
52936
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   402
                }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   403
        };
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   404
    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   405
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   406
    private int id(int i) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   407
        return i;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   408
    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   409
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   410
    private boolean id(boolean b) {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   411
        return b;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   412
    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   413
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   414
    private void throwException() {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   415
        throw new RuntimeException();
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   416
    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   417
    enum E {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   418
        A, B, C;
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   419
        public E next() {
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   420
            return values()[(ordinal() + 1) % values().length];
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   421
        }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   422
    }
9745e4e36dd1 8214114: Switch expressions with try-catch statements
jlahoda
parents:
diff changeset
   423
}