RFR: 8324651: Compiler Implementation for Derived Record Creation (Preview)

Aggelos Biboudis abimpoudis at openjdk.org
Thu Mar 28 11:31:34 UTC 2024


On Wed, 27 Mar 2024 10:24:51 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:

> This is a patch for javac, that adds the Derived Record Creation expressions. The current draft specification for the feature is:
> https://cr.openjdk.org/~gbierman/jep468/jep468-20240326/specs/derived-record-creation-jls.html
> 
> The current CSR is here:
> https://bugs.openjdk.org/browse/JDK-8328637
> 
> The patch is mostly straightforward, with two notable changes:
>  - there is a new `ElementKind.COMPONENT_LOCAL_VARIABLE`, as the specification introduces this term, and it seems consistent with `ElementKind.BINDING_VARIABLE` that was introduced some time ago.
>  - there are a bit broader changes in `Flow`, to facilitate the introduction of variables without an explicit declaration for definite assignment and effectively final computation.

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

> 2226:          *  index into the vars array.
> 2227:          */
> 2228:         void newVar(JCTree pos,VarSymbol sym) {

This is used only twice. One from `void newVar(JCVariableDecl varDecl)` which is very intuitive and one with `newVar(null, component);` which I understand. But, is there any reason to create a `var` in the future with something else than `null` (unrelated to `sym`?). Maybe the comment needs to be updated to document what should be the relation (if any) between `pos` and `sym`.

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

> 3257:                 startPos = tree.pos().getStartPosition();
> 3258: 
> 3259:                 if (vars == null)

Curly braces here?

src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java line 3607:

> 3605:         public void visitLambda(JCLambda that)               { visitTree(that); }
> 3606:         public void visitParens(JCParens that)               { visitTree(that); }
> 3607:         public void visitReconstruction(JCDerivedInstance that) { visitTree(that); }

Maybe `visitDerivedInstance` to be in sync with the `JCDerivedInstance` world?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/18509#discussion_r1542712222
PR Review Comment: https://git.openjdk.org/jdk/pull/18509#discussion_r1542713984
PR Review Comment: https://git.openjdk.org/jdk/pull/18509#discussion_r1542746919


More information about the core-libs-dev mailing list