OpenJDK / amber / amber
changeset 56797:91e02ad382d2 patterns
Correcting handling of yield in matching switch expressions.
author | jlahoda |
---|---|
date | Mon, 17 Jun 2019 17:18:22 +0200 |
parents | 7cb39e5d5420 |
children | 321d2ca49a87 a1b8e9c3de61 |
files | src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransSwitches.java test/langtools/tools/javac/patterns/SwitchExpressionWithPatterns.java |
diffstat | 2 files changed, 9 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransSwitches.java Fri Jun 14 08:37:37 2019 +0200 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransSwitches.java Mon Jun 17 17:18:22 2019 +0200 @@ -160,14 +160,14 @@ @Override public void visitYield(JCYield tree) { if (tree.target == switchExpr) { - tree.target = switchStatement; + JCBreak newBreak = make.Break(null); + newBreak.target = switchStatement; JCExpressionStatement assignment = make.Exec(make.Assign(make.Ident(dollar_switchexpr), translate(tree.value)) .setType(dollar_switchexpr.type)); result = make.Block(0, List.of(assignment, - tree)); - tree.value = null; + newBreak)); } else { result = tree; }
--- a/test/langtools/tools/javac/patterns/SwitchExpressionWithPatterns.java Fri Jun 14 08:37:37 2019 +0200 +++ b/test/langtools/tools/javac/patterns/SwitchExpressionWithPatterns.java Mon Jun 17 17:18:22 2019 +0200 @@ -24,7 +24,7 @@ /* * @test * @summary Basic test for patterns in switch expression - * @compile --enable-preview -source 12 SwitchExpressionWithPatterns.java + * @compile --enable-preview -source ${jdk.version} SwitchExpressionWithPatterns.java * @run main/othervm --enable-preview SwitchExpressionWithPatterns */ @@ -53,9 +53,9 @@ int check = 0; return switch (in) { case 41: check++; //fall-through - case Integer i: check++; break check; - case Long l, Float f: break 3; - default: break 4; + case Integer i: check++; yield check; + case Long l, Float f: yield 3; + default: yield 4; }; } @@ -64,9 +64,9 @@ int check = 0; return switch (in) { case 41 -> 2; - case Integer j -> { break 1; } + case Integer j -> { yield 1; } case Long l, Float f -> 3; - default -> { break 4; } + default -> { yield 4; } }; }