Issue Details (XML | Word | Printable)

Key: GROOVY-1323
Type: Bug Bug
Status: Closed Closed
Resolution: Won't Fix
Priority: Major Major
Assignee: Paul King
Reporter: Ryan Misek
Votes: 0
Watchers: 1
Operations

If you were logged in you would be able to see more operations.
groovy

Inline conditional List << not being executed fully.

Created: 16/May/06 11:44 AM   Updated: 09/Oct/07 07:29 PM   Resolved: 09/Oct/07 07:29 PM
Return to search
Component/s: None
Affects Version/s: 1.0-JSR-6
Fix Version/s: 1.1-rc-1

Time Tracking:
Not Specified

Environment:
WinXP SP2
Groovy Version: 1.0-RC-01-SNAPSHOT JVM: 1.4.2_08-b03

Testcase included: yes


 Description  « Hide

Inline Tertiary (boolean ? x : y) and List.add operator << execution bug

I don't know if this is a parsing issue or a precedence issue but the following code does not act as expected:

TestCase:
----------------------------------
def list = []
list << (true) ? "foo" : "bar"
println list
----------------------------------

Output:
----------------------------------
[true]
----------------------------------

I would have expected to see ["foo"] in this case.

Forcing execution with parens seems to be an easy workaround such as:
list << ((true) ? "foo" : "bar") // list == ["foo"]



Ryan Misek added a comment - 16/May/06 12:08 PM

After looking at the JavaDoc for the List interface, List.add returns a boolean value so it looks to be more of an operator precedence issue.

so at frist glance it seems to be executing like:
(list << (true)) ? "foo" : "bar"

then the "foo" just gets dropped off into no man's land while true is actually added to the list as a side-effect


Paul King added a comment - 09/Oct/07 07:29 PM

Suggest we don't fix this. Groovy resembles Java precedence order here which has ?: at 14 (almost lowest) and << at 6 (just above midway). So, any changes to switch these two around would represent a massive upheaval in precendence order. Just use brackets for this case.