Bugs in new push
Ali Ebrahimi
ali.ebrahimi1781 at gmail.com
Sun Oct 24 21:51:15 PDT 2010
Hi Maurizio,
I got latest bug fixes and merges and now case 1 and 3 works fine.
Comments inlined.
On Sun, Oct 24, 2010 at 2:09 PM, Maurizio Cimadamore <
maurizio.cimadamore at oracle.com> wrote:
> See comments below:
>
>
> On 24/10/10 11:17, Maurizio Cimadamore wrote:
>
>> Thanks for the report, I will look into that.
>>
>> Maurizio
>>
>> On 24/10/10 05:55, Ali Ebrahimi wrote:
>>
>>
>>> *Hi **Maurizio,*
>>> *
>>> *
>>> *After new push the following test that already passed successfully, now
>>> have a few compile error.*
>>> *1)*
>>> *
>>> final Runnable r1 =#
>>> {
>>> System.out.println("Start")
>>> };
>>> r1.run();
>>>
>>> Error:Error:line (67)variable r1 might already have been assigned
>>>
>>>
>>
> This works now - I fixed this in the latest push
yes, this works.
>
> 2)
>>>
>>> final Runnable r2 =#
>>> {
>>> int sum = 0;
>>> for (int i = 1; i<= 4; i++) {
>>> sum += i;
>>> }
>>> out.println("Sum 4 = " + sum);
>>> }
>>> ;
>>> r2.run();
>>> Error:Error:line (76)local variable i cannot be referenced
>>> Error:Error:line (77)local variable sum cannot be referenced
>>>
>>>
>> I need to fix this - I cleaned up some code in the effectively final
> analysis, and I probably ended up messing up something, as the compiler now
> complains also for local variables declared *inside* the closure, which is
> obviously not intended.
>
> 3)
>>>
>>> final IntList11 il = new IntList11();
>>> out.println(il);
>>>
>>>
>>> il.forEach( #
>>> { i -> return i+0;
>>> });
>>> Error:Error:line (181)unreported exception Exception; must be caught
>>> or
>>> declared to be thrown
>>>
>>>
>>
> This doesn't seem a regression from the latest set of changes - I reverted
> the compiler back and tried to compile this:
>
> interface Function<R,A,throws X> {
> R f(A a) throws X;
> }
>
> class List<E> {
> <throws X> E forEach(Function<E,E,X> a) throws X { return null; }
> }
>
> class Test {
> {
> final List<Integer> il = new List<>();
> System.out.println(il);
>
>
> il.forEach( #(i)
> { return i+0;
> });
> }
> }
>
> Which fails in the same way. The current inference scheme goes nuts when it
> sees 'i + 0', causing exception types not to be inferred from the lambda
> body (see related warning).
>
Oh, My bad. my test case was this:
il.forEach( #{Integer i ->
return i+0;
});
And with latest changes works as expected.
>
> Maurizio
>
>
> I compiled the test with my build after getting latest changes.
>>> I attached full test to my mail.
>>>
>>>
>>> Best Regards
>>> Ali Ebrahimi
>>> *
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
Best Regards
Ali Ebrahimi
More information about the lambda-dev
mailing list