<div dir="ltr">Classic story of development scope creep :P, thanks for confirming. <div><br></div><div>Experimentally, I can trigger the special case in BootstrapMethodInvoker by just writing my own shim bootstrap method</div><div><br></div><div> public static Object constantMetafactory(<br> MethodHandles.Lookup lookup,<br> String name,<br> Class<?> type,<br> MethodType samMethodType,<br> MethodHandle implMethod,<br> MethodType instantiatedMethodType)<br> throws Throwable {<br> return LambdaMetafactory.metafactory(<br> lookup, name, methodType(type), samMethodType, implMethod, instantiatedMethodType)<br> .getTarget()<br> .invoke();<br> }</div><div><br></div><div>This allows me to retarget a number of invokedynamic callsites to constant dynamic and saves a small amount of classfile bytes.</div><div><br></div><div>Do you think this is a valuable optimization? I'm guessing it would only make a difference in terms of bootstrapping.. perhaps condy is a simpler thing for the vm to manage than an indy+constantcallsite? Or perhaps I should just assume that since the vm engineers abandoned working on this, it wasn't particularly valuable?</div><div><br></div><div>Thanks again!</div><div>-Luke<br><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Oct 20, 2023 at 1:14 PM Brian Goetz <<a href="mailto:brian.goetz@oracle.com">brian.goetz@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<font size="4"><font face="monospace">There was an experiment to
translate non-capturing lambdas with condy, which was never
integrated. As you observed, it requires changes to the
bootstrap method signature; when we started adding the alternate
bootstrap method, we realized there were some cleanups in the
LMF spec/implementation we wanted to do, but these ended up
getting back-burnered. </font></font><br>
<br>
<div>On 10/20/2023 4:10 PM, Luke Sandberg
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hi, as part of a custom compiler I am working on I
stumbled across <a href="https://bugs.openjdk.org/browse/JDK-8198418" target="_blank">https://bugs.openjdk.org/browse/JDK-8198418</a>
which references invoking LambdaMetafactory.metafactory from a
condy instruction when there are no bound parameters.
<div><br>
</div>
<div>I see that there is support for this in
BootstrapMethodInvoker: <a href="https://github.com/openjdk/jdk/blob/77b2394c46bd304ffc0658cb758d971f1f2940b6/src/java.base/share/classes/java/lang/invoke/BootstrapMethodInvoker.java#L136C28-L136C55" target="_blank">https://github.com/openjdk/jdk/blob/77b2394c46bd304ffc0658cb758d971f1f2940b6/src/java.base/share/classes/java/lang/invoke/BootstrapMethodInvoker.java#L136C28-L136C55</a></div>
<div><br>
</div>
<div>But there is no method implementing this signature that i
can find. </div>
<div><br>
</div>
<div>Is this a half implemented idea from the original condy
implementation? Or am I missing something? Initially i
thought that BootstrapMethodInvoker might handle the signature
delta, but experimentally that is not true :D</div>
<div><br>
</div>
<div>Thanks,</div>
<div>-Luke</div>
</div>
</blockquote>
<br>
</div>
</blockquote></div>