mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-02-18 03:21:20 -05:00
part of the way to supporting multiline array comprehensions -- the grammar and parsing is there -- the code generation is tricky
This commit is contained in:
@@ -321,7 +321,9 @@ rule
|
|||||||
# Looks a little confusing, check nodes.rb for the arguments to ForNode.
|
# Looks a little confusing, check nodes.rb for the arguments to ForNode.
|
||||||
For:
|
For:
|
||||||
Expression FOR
|
Expression FOR
|
||||||
ForVariables ForSource { result = ForNode.new(val[0], val[3][0], val[2][0], val[3][1], val[2][1]) }
|
ForVariables ForSource "." { result = ForNode.new(val[0], val[3][0], val[2][0], val[3][1], val[2][1]) }
|
||||||
|
| FOR ForVariables ForSource
|
||||||
|
Terminator Expressions "." { result = ForNode.new(val[4], val[2][0], val[1][0], val[2][1], val[1][1]) }
|
||||||
;
|
;
|
||||||
|
|
||||||
# An array comprehension has variables for the current element and index.
|
# An array comprehension has variables for the current element and index.
|
||||||
@@ -332,9 +334,9 @@ rule
|
|||||||
|
|
||||||
# The source of the array comprehension can optionally be filtered.
|
# The source of the array comprehension can optionally be filtered.
|
||||||
ForSource:
|
ForSource:
|
||||||
IN PureExpression "." { result = [val[1]] }
|
IN PureExpression { result = [val[1]] }
|
||||||
| IN PureExpression
|
| IN PureExpression
|
||||||
IF Expression "." { result = [val[1], val[3]] }
|
IF Expression { result = [val[1], val[3]] }
|
||||||
;
|
;
|
||||||
|
|
||||||
# Switch/When blocks.
|
# Switch/When blocks.
|
||||||
|
|||||||
@@ -571,6 +571,8 @@ module CoffeeScript
|
|||||||
if o[:return] || o[:assign]
|
if o[:return] || o[:assign]
|
||||||
return_result = "#{o[:assign].compile(o)} = #{return_result}" if o[:assign]
|
return_result = "#{o[:assign].compile(o)} = #{return_result}" if o[:assign]
|
||||||
return_result = "return #{return_result}" if o[:return]
|
return_result = "return #{return_result}" if o[:return]
|
||||||
|
o.delete(:assign)
|
||||||
|
o.delete(:return)
|
||||||
if @filter
|
if @filter
|
||||||
body = CallNode.new(ValueNode.new(LiteralNode.new(rvar), [AccessorNode.new('push')]), [@body])
|
body = CallNode.new(ValueNode.new(LiteralNode.new(rvar), [AccessorNode.new('push')]), [@body])
|
||||||
body = IfNode.new(@filter, body, nil, :statement => true)
|
body = IfNode.new(@filter, body, nil, :statement => true)
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
nums: n * n for n in [1, 2, 3] if n % 2 isnt 0.
|
nums: n * n for n in [1, 2, 3] if n % 2 isnt 0.
|
||||||
result: n * 2 for n in nums.
|
results: n * 2 for n in nums.
|
||||||
|
|
||||||
print(result.join(',') is '2,18')
|
# next: for n in [1, 2, 3] if n % 2 isnt 0
|
||||||
|
# print('hi') if false
|
||||||
|
# n * n * 2.
|
||||||
|
|
||||||
|
print(results.join(',') is '2,18')
|
||||||
Reference in New Issue
Block a user