CONSTANT_Dynamic bootstrap signature restriction

Dan Smith daniel.smith at oracle.com
Mon Mar 5 19:41:16 UTC 2018


In discussions about future directions for CONSTANT_Dynamic, we've decided it would be helpful to restrict the set of legal bootstrap signatures. The first parameter type would be required to be declared with type MethodHandles.Lookup.

See [1] for further discussion.

Here's the proposed spec change:

--------

1. _R_ gives a symbolic reference to a bootstrap method handle. The bootstrap method handle is resolved ([5.4.3.5]) to obtain a `reference` to an instance of `java.lang.invoke.MethodHandle`. 

    Any exception that can be thrown as a result of failure of resolution of a symbolic reference to a method handle can be thrown in this step. 

    **If _R_ is a symbolic reference to a dynamically-computed constant, then it must be the case that the first parameter type of the `java.lang.invoke.MethodType` of the `java.lang.invoke.MethodHandle` is a `Class` representing the class `java.lang.invoke.MethodHandles$Lookup`. If not, resolution fails with a `BootstrapMethodError`.** 

    > **In contrast, for historical reasons, a dynamically-computed call site may be resolved using a bootstrap method handle whose first parameter type is `Object` or some other compatible type, as determined by the `invokeWithArguments` invocation described below.** 

--------

—Dan

[1] https://bugs.openjdk.java.net/browse/JDK-8199051


More information about the valhalla-spec-observers mailing list