RFR: 8300543 Compiler Implementation for Pattern Matching for switch [v4]
Maurizio Cimadamore
mcimadamore at openjdk.org
Fri Apr 21 15:20:55 UTC 2023
On Fri, 21 Apr 2023 10:56:55 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:
>> This is the first draft of a patch for JEP 440 and JEP 441. Changes included:
>>
>> - the pattern matching for switch and record patterns features are made final, together with updates to tests.
>> - parenthesized patterns are removed.
>> - qualified enum constants are supported for case labels.
>>
>> This change herein also includes removal record patterns in for each loop, which may be split into a separate PR in the future.
>
> Jan Lahoda has updated the pull request incrementally with one additional commit since the last revision:
>
> Replacing use of mutable callsite with a mutable state.
src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java line 915:
> 913: */
> 914: private List<PatternDescription> reduceBindingPatterns(Type selectorType, List<PatternDescription> patterns) {
> 915: Set<Symbol> existingBindings = patterns.stream()
Playing some more - I found this example:
class Test {
sealed interface I permits C, D { }
non-sealed interface C extends I { }
non-sealed interface D extends I { }
interface F { }
<Z extends I & F> int test(Z o) {
return switch (o) {
case C c -> 1;
case D d -> 2;
};
}
}
Which compiles correctly, but it doesn't look exhaustive to me (because of F) ?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/13074#discussion_r1173896399
More information about the core-libs-dev
mailing list