Thank you. Overall looks good. Detailed comments:

8.8.7. In the BNF for ConstructorBody, in the second alternative, I believe 
that no brackets should appear around ExplicitConstructorInvocation:

{ [BlockStatements] [ExplicitConstructorInvocation] [BlockStatements] }

should be

{ [BlockStatements] ExplicitConstructorInvocation [BlockStatements] }


In the second paragraph, in "an invocation of the constructor of its direct 
superclass” I believe the word “its” should be “the”.


The fourth paragraph defines the phrase “prologue of [the/a] constructor body”, 
but the fifth paragraph twice uses the phrase “prologue of a constructor”, 
which is not defined.


12.5 In the list of six steps for processing a constructor, the logic is a bit 
difficult to follow because of nonparallelism, recapitulation, and a mixture of 
explicit “goto” instructions with drop-through. I suggest this refactored 
structure:


1.  Assign the arguments for the constructor to newly created parameter 
variables for this constructor invocation.

2.  If this constructor does not contain an explicit constructor invocation 
(8.8.7.1), go to step 4; otherwise, continue with step 3.

3.  Execute the BlockStatements, if any, of the prologue of the constructor 
body. If execution of any statement completes abruptly, then execution of the 
constructor completes abruptly for the same reason; otherwise, continue with 
step 4.

4.  If this constructor does not contain an explicit constructor invocation 
(8.8.7.1), go to step 6; otherwise, continue with step 5.

5. Evaluate the arguments of the explicit constructor invocation—it may be an 
invocation of of another constructor in the same class (using this) or an 
invocation of a superclass constructor (using super)—and process that 
constructor invocation recursively using this same nine-step procedure. If that 
constructor invocation completes abruptly, then this procedure completes 
abruptly for the same reason; otherwise, go to step 8.

6.  If this constructor is a constructor for class Object, go to step 8; 
otherwise continue with step 7.

7. This constructor contains an implicit invocation super(); of a superclass 
constructor with no arguments. Process that superclass constructor invocation 
recursively using this same nine-step procedure. If that constructor invocation 
completes abruptly, then this procedure completes abruptly for the same reason. 
Otherwise, continue with step 8.

8. Execute the instance initializers and instance variable initializers for 
this class, assigning the values of instance variable initializers to the 
corresponding instance variables, in the left-to-right order in which they 
appear textually in the source code for the class. If execution of any of these 
initializers results in an exception, then no further initializers are 
processed and this procedure completes abruptly with that same exception. 
Otherwise, continue with step 9.

9. Execute the BlockStatements, if any, of the epilogue of this constructor. If 
execution of any statement completes abruptly, then this procedure completes 
abruptly for the same reason. Otherwise, this procedure completes normally.


Hope this helps.

—Guy


On May 12, 2023, at 5:08 AM, Gavin Bierman <[email protected]> wrote:

The latest draft of the spec change document for JEP 447 (Statements before 
super()) is available at:

https://cr.openjdk.org/~gbierman/jep447/latest/

Gavin

On 20 Apr 2023, at 22:29, Gavin Bierman <[email protected]> wrote:

Third time lucky:

Dear experts:

The first draft of the spec change document for the feature Statements before 
super() [1] is now available at:

https://cr.openjdk.org/~gbierman/jep447/latest/

Please give us your feedback (either on this list or directly to me).

Thanks,
Gavin

[1] Statements before super(): https://openjdk.org/jeps/447

On 20 Apr 2023, at 22:26, Gavin Bierman <[email protected]> wrote:

[Resending as the hyperlinks got mangled]

Dear experts:

The first draft of the spec change document for the feature Statements before 
super() [1] is now available at:

https://cr.openjdk.org/~gbierman/jep447/latest/ 
<https://cr.openjdk.org/~gbierman/jep440+44/latest/>

Please give us your feedback (either on this list or directly to me).

Thanks,
Gavin

[1] Statements before super(): https://openjdk.org/jeps/447 
<https://openjdk.org/jeps/4>



Reply via email to