Adopting JEP 303 (Intrinsics for LDC and INVOKEDYNAMIC) into Amber

Brian Goetz brian.goetz at
Fri Apr 21 13:55:00 UTC 2017

There's a reason we don't want to do this.  A ClassConstant (and the 
other constant types) should not be dependent on what classes have been 
loaded by *this* VM; they should merely describe enough information to 
load a class. (Pull on that string some more, and you get to "so we can 
just use MethodType too" and then...)

The target-typing trick allows Foo.class to either be a Class, or a 
ClassConstant, depending on context.  If it is typed as ClassConstant, 
it doesn't force loading of the class.

We might decide this is too much magic; still figuring out the sweet 
spot here.

On 4/21/2017 1:03 AM, Tagir Valeev wrote:
> Probably it would be easier to declare class Class<T> as implements 
> Constable<Class<T>> and replace ClassConstant with Constable<Class<?>> 
> in method signatures where applicable? Or introduce some intermediate 
> interface?

More information about the amber-dev mailing list