groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Shil Sinha <shil.si...@gmail.com>
Subject Re: A @CompileStatic bug, or is it just me: [].withDefault { 0 }
Date Tue, 29 Sep 2015 21:58:04 GMT
The bytecode for x[n] is:

 ILOAD 1
    INVOKESTATIC org/codehaus/groovy/runtime/DefaultGroovyMethods.getAt
(Ljava/util/List;I)Ljava/lang/Object;

The implementation of DGM.getAt(List, int) returns null if the given index
is >= the size of the list, so this makes sense. Seems like a bug in the
DGM implementation more than @CompileStatic.

On Tue, Sep 29, 2015 at 5:17 PM, Søren Berg Glasius <soeren@glasius.dk>
wrote:

> Should I file a bug report?
>
>
> Best regards / Med venlig hilsen,
> Søren Berg Glasius
>
> Hedevej 1, Gl. Rye, 8680 Ry, Denmark
> Mobile: +45 40 44 91 88, Skype: sbglasius
> --- Press ESC once to quit - twice to save the changes.
>
> On 29 September 2015 at 10:17, Dinko Srkoč <dinko.srkoc@gmail.com> wrote:
>
>> On 29 September 2015 at 10:12, Cédric Champeau
>> <cedric.champeau@gmail.com> wrote:
>> > That's because it's withDefault { 1 } ;)
>>
>> Argh! Still morning for me. :-(
>>
>> >
>> > 2015-09-29 10:05 GMT+02:00 Dinko Srkoč <dinko.srkoc@gmail.com>:
>> >>
>> >> On 29 September 2015 at 09:58, Cédric Champeau
>> >> <cedric.champeau@gmail.com> wrote:
>> >> > This looks like a bug. Would be interesting to look at the bytecode
>> to
>> >> > check
>> >> > what method is called for x[n].
>> >>
>> >> Curiously, I tried to do just that in the Groovy AST Browser and, for
>> >> the following piece of code:
>> >>
>> >>   @groovy.transform.CompileStatic
>> >>   def foo() {
>> >>       [].withDefault(1)
>> >>   }
>> >>
>> >> got this:
>> >>
>> >> Unable to produce AST for this phase due to earlier compilation error:
>> >> startup failed:
>> >> script1443513793544.groovy: 3: [Static type checking] - Cannot find
>> >> matching method java.util.List#withDefault(int). Please check if the
>> >> declared type is right and if the method exists.
>> >>  @ line 3, column 5.
>> >>        [].withDefault(1)
>> >>        ^
>> >>
>> >> That's Groovy 2.4.4
>> >>
>> >> Cheers,
>> >> Dinko
>> >>
>> >> >
>> >> > 2015-09-29 9:54 GMT+02:00 Søren Berg Glasius <soeren@glasius.dk>:
>> >> >>
>> >> >> Hi Fellows,
>> >> >>
>> >> >> I stumbled upon this today.
>> >> >>
>> >> >> This code runs:
>> >> >>
>> >> >> class Test {
>> >> >>     private List<Integer> x = [].withDefault { 0 }
>> >> >>     Integer getValue(int n) {
>> >> >>         return x[n]
>> >> >>     }
>> >> >> }
>> >> >> assert new Test().getValue(5) == 0
>> >> >>
>> >> >> where as when I compile static:
>> >> >>
>> >> >> @CompileStatic
>> >> >> class Test {
>> >> >>     private List<Integer> x = [].withDefault { 0 }
>> >> >>     Integer getValue(int n) {
>> >> >>         return x[n]
>> >> >>     }
>> >> >> }
>> >> >> assert new Test().getValue(5) == 0
>> >> >>
>> >> >> I get an assertion failed, because new Test().getValue(5) == null
>> >> >>
>> >> >> Is this expected behavior or a bug?
>> >> >>
>> >> >>
>> >> >> Best regards / Med venlig hilsen,
>> >> >> Søren Berg Glasius
>> >> >>
>> >> >> Hedevej 1, Gl. Rye, 8680 Ry, Denmark
>> >> >> Mobile: +45 40 44 91 88, Skype: sbglasius
>> >> >> --- Press ESC once to quit - twice to save the changes.
>> >> >
>> >> >
>> >
>> >
>>
>
>

Mime
View raw message