Review request: update javac to properly output mandated parameters in MethodParameters attributes

Alex Buckley alex.buckley at oracle.com
Thu Feb 7 14:06:30 PST 2013


On 2/7/2013 12:29 PM, maurizio cimadamore wrote:
> It would seem that the spec is not defining (on top of my head - there
> are probably others):
>
> *) (effectively) final variables passed in to inner classes (javac only
> does that for reference-types as others are just constants that can be
> produced on the stack at will)

Right. The JLS does not say that those ctor parameters are implicitly 
declared. javac should mark them with ACC_SYNTHETIC.

> *) I believe javac's generated enum constructor has an additional
> parameter accepting the ordinal

We need to be clear what we're talking abut here. For an enum type, JLS 
8.9.2 has always implicitly declared a default ctor _with no formal 
parameters_ - but that ctor is required to be private, so no other 
compiler can emit code which uses it. I think you're talking not about 
the default ctor, but about an explicitly-declared ctor to which javac 
adds a parameter. In this case, is code from another compiler expected 
to use the parameter to construct the enum instance correctly? If yes, 
then the ordinal parameter should be implicitly declared. Please let me 
know so I can update the JLS.

> In any case, the implementation problem remains: it doesn't distinguish
> between impl-only parameters and 'implicitly declared' ones. It just
> takes all parameters that do not have a correspondent in the source code
> and put them in the same place.

I hope Eric is out there somewhere :-)

Alex



More information about the compiler-dev mailing list