mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-02-18 19:34:27 -05:00
Allowing pattern matching within for..loops
This commit is contained in:
@@ -1079,8 +1079,10 @@ exports.ForNode: class ForNode extends BaseNode
|
||||
@step: source.step
|
||||
@object: !!source.object
|
||||
[@name, @index]: [@index, @name] if @object
|
||||
@pattern: @name instanceof ValueNode
|
||||
throw new Error('index cannot be a pattern matching expression') if @index instanceof ObjectNode
|
||||
@children: compact [@body, @source, @filter]
|
||||
@returns: false
|
||||
@returns: false
|
||||
|
||||
top_sensitive: ->
|
||||
true
|
||||
@@ -1104,7 +1106,7 @@ exports.ForNode: class ForNode extends BaseNode
|
||||
scope: o.scope
|
||||
name: @name and @name.compile o
|
||||
index: @index and @index.compile o
|
||||
scope.find name if name
|
||||
scope.find name if name and not @pattern
|
||||
scope.find index if index
|
||||
body_dent: @idt 1
|
||||
rvar: scope.free_variable() unless top_level
|
||||
@@ -1120,7 +1122,11 @@ exports.ForNode: class ForNode extends BaseNode
|
||||
svar: scope.free_variable()
|
||||
index_var: null
|
||||
source_part: "$svar = ${ @source.compile(o) };\n$@tab"
|
||||
var_part: "$body_dent$name = $svar[$ivar];\n" if name
|
||||
var_part: "$body_dent$name = $svar[$ivar];\n" if name and not @pattern
|
||||
if @pattern
|
||||
o.indent: @idt 1
|
||||
o.top: true
|
||||
var_part: new AssignNode(@name, literal("$svar[$ivar]")).compile(o) + "\n"
|
||||
if not @object
|
||||
lvar: scope.free_variable()
|
||||
step_part: if @step then "$ivar += ${ @step.compile(o) }" else "$ivar++"
|
||||
|
||||
Reference in New Issue
Block a user