Re: RFR: 8262889: Compiler implementation for Record Patterns [v4]

2022-05-10 Thread Jan Lahoda
On Mon, 9 May 2022 20:52:15 GMT, Vicente Romero  wrote:

> I've noticed that this code:
> 
> ```
> class Test {
> String e(E e) {
> return switch (e) {
> case A -> "42";
> };
> }
> 
> enum E {
> A, B;
> }
> }
> ```
> 
> fails with:
> 
> ```
> Test.java:3: error: the switch expression does not cover all possible input 
> values
> return switch (e) {
>^
> 1 error
> ```
> 
> before this change but gets accepted with no errors after the change in this 
> PR

Oops, sorry, should be fixed now 
([a0d0c78](https://github.com/openjdk/jdk/pull/8516/commits/a0d0c78bcbb5ecb010c2e9bd235b3ae89eb00823)).

-

PR: https://git.openjdk.java.net/jdk/pull/8516


Re: RFR: 8262889: Compiler implementation for Record Patterns [v4]

2022-05-09 Thread Vicente Romero
On Mon, 9 May 2022 14:37:35 GMT, Jan Lahoda  wrote:

>> 8262889: Compiler implementation for Record Patterns
>> 
>> A first version of a patch that introduces record patterns into javac as a 
>> preview feature. For the specification, please see:
>> http://cr.openjdk.java.net/~gbierman/jep427+405/jep427+405-20220426/specs/patterns-switch-record-patterns-jls.html
>> 
>> There are two notable tricky parts:
>> -in the parser, it was necessary to improve the `analyzePattern` method to 
>> handle nested/record patterns, while still keeping error recovery reasonable
>> -in the `TransPatterns`, the desugaring of the record patterns is very 
>> straightforward - effectivelly the record patterns are desugared into 
>> guards/conditions. This will likely be improved in some future 
>> version/preview
>> 
>> `MatchException` has been extended to cover additional cases related to 
>> record patterns.
>
> Jan Lahoda has updated the pull request with a new target base due to a merge 
> or a rebase. The pull request now contains eight commits:
> 
>  - Merge branch 'type-pattern-third' into patterns-record-deconstruction3
>  - Using Type.isRaw instead of checking the AST structure.
>  - Exhaustiveness should accept supertypes of the specified type.
>  - Renaming the features from deconstruction pattern to record pattern.
>  - Fixing guards after record patterns.
>  - Raw types are not allowed in record patterns.
>  - Reflecting review feedback.
>  - 8262889: Compiler implementation for Record Patterns

I've noticed that this code:

class Test {
String e(E e) {
return switch (e) {
case A -> "42";
};
}

enum E {
A, B;
}
}

fails with:

Test.java:3: error: the switch expression does not cover all possible input 
values
return switch (e) {
   ^
1 error

before this change but gets accepted with no error message after it

-

PR: https://git.openjdk.java.net/jdk/pull/8516


Re: RFR: 8262889: Compiler implementation for Record Patterns [v4]

2022-05-09 Thread Vicente Romero
On Mon, 9 May 2022 14:37:35 GMT, Jan Lahoda  wrote:

>> 8262889: Compiler implementation for Record Patterns
>> 
>> A first version of a patch that introduces record patterns into javac as a 
>> preview feature. For the specification, please see:
>> http://cr.openjdk.java.net/~gbierman/jep427+405/jep427+405-20220426/specs/patterns-switch-record-patterns-jls.html
>> 
>> There are two notable tricky parts:
>> -in the parser, it was necessary to improve the `analyzePattern` method to 
>> handle nested/record patterns, while still keeping error recovery reasonable
>> -in the `TransPatterns`, the desugaring of the record patterns is very 
>> straightforward - effectivelly the record patterns are desugared into 
>> guards/conditions. This will likely be improved in some future 
>> version/preview
>> 
>> `MatchException` has been extended to cover additional cases related to 
>> record patterns.
>
> Jan Lahoda has updated the pull request with a new target base due to a merge 
> or a rebase. The pull request now contains eight commits:
> 
>  - Merge branch 'type-pattern-third' into patterns-record-deconstruction3
>  - Using Type.isRaw instead of checking the AST structure.
>  - Exhaustiveness should accept supertypes of the specified type.
>  - Renaming the features from deconstruction pattern to record pattern.
>  - Fixing guards after record patterns.
>  - Raw types are not allowed in record patterns.
>  - Reflecting review feedback.
>  - 8262889: Compiler implementation for Record Patterns

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java line 822:

> 820: 
> nestedComponentPatterns);
> 821: 
> 822: //for each of the symbols covered by the starting component, 
> find all deconstruction patterns

this comment should probably read: find all `record` patterns?

-

PR: https://git.openjdk.java.net/jdk/pull/8516


Re: RFR: 8262889: Compiler implementation for Record Patterns [v4]

2022-05-09 Thread Vicente Romero
On Fri, 6 May 2022 17:40:25 GMT, Jan Lahoda  wrote:

>> src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java line 4217:
>> 
>>> 4215: }
>>> 4216: ListBuffer outBindings = new ListBuffer<>();
>>> 4217: List recordTypes = expectedRecordTypes;
>> 
>> nit: probably a matter of style but why not reusing the already declared 
>> `expectedRecordTypes` declaring a new variable seems unnecessary
>
> Please note the full `expectedRecordTypes` are used for error reporting, but 
> the reference to `List` in `recordTypes` is overwritten in the loop (at the 
> time of an error report, it may not longer point to the full expected types, 
> and hence cannot be used for error reporting).

Ok I see, thanks

-

PR: https://git.openjdk.java.net/jdk/pull/8516


Re: RFR: 8262889: Compiler implementation for Record Patterns [v4]

2022-05-09 Thread Jan Lahoda
> 8262889: Compiler implementation for Record Patterns
> 
> A first version of a patch that introduces record patterns into javac as a 
> preview feature. For the specification, please see:
> http://cr.openjdk.java.net/~gbierman/jep427+405/jep427+405-20220426/specs/patterns-switch-record-patterns-jls.html
> 
> There are two notable tricky parts:
> -in the parser, it was necessary to improve the `analyzePattern` method to 
> handle nested/record patterns, while still keeping error recovery reasonable
> -in the `TransPatterns`, the desugaring of the record patterns is very 
> straightforward - effectivelly the record patterns are desugared into 
> guards/conditions. This will likely be improved in some future version/preview
> 
> `MatchException` has been extended to cover additional cases related to 
> record patterns.

Jan Lahoda has updated the pull request with a new target base due to a merge 
or a rebase. The pull request now contains eight commits:

 - Merge branch 'type-pattern-third' into patterns-record-deconstruction3
 - Using Type.isRaw instead of checking the AST structure.
 - Exhaustiveness should accept supertypes of the specified type.
 - Renaming the features from deconstruction pattern to record pattern.
 - Fixing guards after record patterns.
 - Raw types are not allowed in record patterns.
 - Reflecting review feedback.
 - 8262889: Compiler implementation for Record Patterns

-

Changes: https://git.openjdk.java.net/jdk/pull/8516/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8516&range=03
  Stats: 2255 lines in 50 files changed: 2169 ins; 15 del; 71 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8516.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8516/head:pull/8516

PR: https://git.openjdk.java.net/jdk/pull/8516