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