recursive lambda as a local variable

Remi Forax forax at univ-mlv.fr
Fri Sep 13 03:51:08 PDT 2013


On 09/13/2013 10:21 AM, Peter Levart wrote:
> On 09/12/2013 05:17 PM, Brian Goetz wrote:
>>> - The part left of the '::' can be an arbitrarily long expression that will
>>> be evaluated immediately, while the method invocation itself will be
>>> deferred until the corresponding SAM method is invoked. Thus, 'null' might
>>> by bound now and detected much later.
>> This is just a compiler bug; if the part to the left evaluates to null,
>> it should throw NPE immediately (see jsr335-15.28.2-30-A2: If the result
>> of evaluation of the subexpression is null, then a NullPointerException
>> is thrown.)
>>
>> Thanks for reporting this.  I will file a bug.
> This could be checked in lambda metafactory generated constructor,
> right? It doesn't have to be compiler generated code.
>
> Regards, Peter

yes,
but it requires to change the protocol between javac and the lambda 
metafactory
to signal if a captured parameter is bound or not.

It seems simpler, to me, to modify javac to generate
   DUP
   INVOKEVIRTUAL Object.getClass()
in front of the first argument of the invokedynamic call.

Rémi



More information about the lambda-dev mailing list