RFR: 8294942: Compiler implementation for Record Patterns (Second Preview) [v4]
Vicente Romero
vromero at openjdk.org
Wed Nov 9 18:12:41 UTC 2022
On Wed, 9 Nov 2022 15:52:55 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:
>> This is a partial implementation of [JEP 432: Record Patterns (Second Preview)](https://openjdk.org/jeps/432) and [JEP 433: Pattern Matching for switch (Fourth Preview)](https://openjdk.org/jeps/433). Namely, it implements:
>>
>> - removal of named record patterns
>> - (preview) type inference for type test and record patterns
>> - cleaner switch case specification (e.g. no combination of `null` constants and type test patterns)
>> - fixing exhaustiveness of certain switches
>>
>> The patch does not contain support for record patterns in enhanced for statements, that is [part of a separate pull request](https://github.com/openjdk/jdk/pull/10798).
>>
>> For more information on the changes please see:
>> - the JEPs: [JEP 432](https://openjdk.org/jeps/432) and [JEP 433](https://openjdk.org/jeps/433)
>> - the CSRs: [JEP 432 - JDK-8294944](https://bugs.openjdk.org/browse/JDK-8294944) and [JEP 433 - JDK-8294946](https://bugs.openjdk.org/browse/JDK-8294946)
>> - the current [specification draft](http://cr.openjdk.java.net/~gbierman/jep432%2b433/jep432%2b433-20221028/specs/patterns-switch-record-patterns-jls.html)
>>
>> Current total specdiff for both this PR and [the enhanced for PR](https://github.com/openjdk/jdk/pull/10798) is [here](http://cr.openjdk.java.net/~jlahoda/8294945/specdiff.preliminary.00/overview-summary.html).
>>
>> Any feedback is welcome.
>>
>> Thanks!
>
> Jan Lahoda has updated the pull request incrementally with one additional commit since the last revision:
>
> Not looking for common supertype, not solving in a loop.
side I extracted this example from the spec:
import java.util.function.*;
record Mapper<T>(T in, T out) implements UnaryOperator<T> {
public T apply(T arg) { return in.equals(arg) ? out : null; }
}
class Test {
void test(Function<? super String, ? extends CharSequence> f) {
if (f instanceof Mapper(var in, var out)) {
boolean shorter = out.length() < in.length();
}
}
}
it is not accepted by the current code, we should either modify the spec or go deeper and see if there is something missing in the current implementation
-------------
PR: https://git.openjdk.org/jdk/pull/10814
More information about the compiler-dev
mailing list