[GEP] About supporting Java-Like array literal

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[GEP] About supporting Java-Like array literal

Daniel Sun
Hi all,

       The new parser Parrot has supported some code like `int[] a = new
int[] {1, 2, 3}`. In order to make Groovy compatible with Java better(copy &
paste code and run well), I propose to support Java-Like array literal
further, i.e. supporting some code like`int[] a = {1, 2, 3}`.  I
experimented the new feature last weekend, it works well on the `phoenix`
branch of `danielsun1106/groovy-parser` project[1].

       As for some ambiguous scenario, e.g. `def a = { 1 }`, it is still
parsed as closure, but if the array type is specified `int[] a = { 1 }`, it
will be parsed as int array.

       Any thoughts?

Cheers,
Daniel.Sun
[1] https://github.com/danielsun1106/groovy-parser/tree/phoenix




--
Sent from: http://groovy.329449.n5.nabble.com/Groovy-Dev-f372993.html
Reply | Threaded
Open this post in threaded view
|

Re: [GEP] About supporting Java-Like array literal

paulk_asert
The following examples, although a little strange, are currently supported in master:

Closure[] x = { -> 1 + 1 }
assert x[0].call() == 2

Closure[] y = { {-> 1 + 1 } }
assert y[0].call().call() == 2

Are both supported in your branch or for the second example, is the second ".call()" no longer needed?


On Mon, Apr 16, 2018 at 7:00 PM, Daniel Sun <[hidden email]> wrote:
Hi all,

       The new parser Parrot has supported some code like `int[] a = new
int[] {1, 2, 3}`. In order to make Groovy compatible with Java better(copy &
paste code and run well), I propose to support Java-Like array literal
further, i.e. supporting some code like`int[] a = {1, 2, 3}`.  I
experimented the new feature last weekend, it works well on the `phoenix`
branch of `danielsun1106/groovy-parser` project[1].

       As for some ambiguous scenario, e.g. `def a = { 1 }`, it is still
parsed as closure, but if the array type is specified `int[] a = { 1 }`, it
will be parsed as int array.

       Any thoughts?

Cheers,
Daniel.Sun
[1] https://github.com/danielsun1106/groovy-parser/tree/phoenix




--
Sent from: http://groovy.329449.n5.nabble.com/Groovy-Dev-f372993.html

Reply | Threaded
Open this post in threaded view
|

Re: [GEP] About supporting Java-Like array literal

Daniel Sun
Hi Paul,

    The Parrot parser on the `phoenix` branch can handle nested array
literals, but it parses it as list currently, we can refine it later ;-)

```
Closure[] y = { {-> 1 + 1 } }
assert y[0].call().call() == 2
```
> is the second ".call()" no longer needed?
    yes.
   

Cheers,
Daniel.Sun



--
Sent from: http://groovy.329449.n5.nabble.com/Groovy-Dev-f372993.html
Reply | Threaded
Open this post in threaded view
|

Re: [GEP] About supporting Java-Like array literal

paulk_asert
Well, it's fine to "refine it later" on the branch. I don't think we want it in master unless we exactly know what breaking changes like above might be involved.

Cheers, Paul.

On Mon, Apr 16, 2018 at 8:35 PM, Daniel Sun <[hidden email]> wrote:
Hi Paul,

    The Parrot parser on the `phoenix` branch can handle nested array
literals, but it parses it as list currently, we can refine it later ;-)

```
Closure[] y = { {-> 1 + 1 } }
assert y[0].call().call() == 2
```
> is the second ".call()" no longer needed?
    yes.


Cheers,
Daniel.Sun

Reply | Threaded
Open this post in threaded view
|

Re: [GEP] About supporting Java-Like array literal

Daniel Sun
Hi Paul,

      Here is the PR to make Groovy support java-like array:
https://github.com/apache/groovy/pull/691

Cheers,
Daniel.Sun



--
Sent from: http://groovy.329449.n5.nabble.com/Groovy-Dev-f372993.html