On Thu, 28 Aug 2025 12:55:05 GMT, Vicente Romero <[email protected]> wrote:

>> Before this fix only strict fields were readable in the prologue phase. The 
>> proposed fix should allow any instance fields of identity classes to be 
>> readable in the prologue phase. This implies changes in flow analysis as 
>> before we were only tracking final and strict fields. There is also some 
>> "cooperation" needed in the code to detect cases when reading a field is not 
>> allowed in the prologue phase. For example some methods in Resolve don't 
>> have all the needed information at the moment they are dealing with some 
>> ASTs and part of the processing needs to be done in Attr
>> 
>> TIA
>> 
>> This PR is a remake of https://github.com/openjdk/valhalla/pull/1490
>
> Vicente Romero has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   minor diff

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java line 1261:

> 1259:                     for (JCTree stat : tree.body.stats) {
> 1260:                         prologueCode.add(stat);
> 1261:                         /* gather all the stats in the body until a 
> `super` or `this` constructor invocation is found,

I understand that you  wanted to simplify the visitor -- but doing a linear 
pass on the constructor and creating a new list of statements is also kind of 
expensive -- maybe when we're done with this change we can see if there's a way 
to set a flag on the visitor to shortcircuit the analysis after the super call 
is found.

src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java line 971:

> 969:     public record SymAndTree(Symbol symbol, JCTree tree) {}
> 970: 
> 971:     public static java.util.List<SymAndTree> symbolsFor(List<JCTree> 
> nodes) {

Is the use of `j.u.List` deliberate here?

src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java line 982:

> 980:     }
> 981: 
> 982:     public static java.util.List<SymAndTree> symbolsFor(JCTree node) {

Can you provide some examples on what this method is supposed to do? E.g. 
example input and output?

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

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1523#discussion_r2307921664
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1523#discussion_r2307925310
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1523#discussion_r2307929864

Reply via email to