diff --git a/lib/coffee_script/nodes.js b/lib/coffee_script/nodes.js index b42cc18c..ba9fbc6e 100644 --- a/lib/coffee_script/nodes.js +++ b/lib/coffee_script/nodes.js @@ -526,11 +526,12 @@ // part of a comprehension, slice, or splice. // TODO: This generates pretty ugly code ... shrink it. compile_array: function compile_array(o) { - var arr, body; - body = Expressions.wrap([new LiteralNode('i')]); + var arr, body, name; + name = o.scope.free_variable(); + body = Expressions.wrap([new LiteralNode(name)]); arr = Expressions.wrap([new ForNode(body, { source: (new ValueNode(this)) - }, new LiteralNode('i')) + }, new LiteralNode(name)) ]); return (new ParentheticalNode(new CallNode(new CodeNode([], arr)))).compile(o); } diff --git a/src/nodes.coffee b/src/nodes.coffee index b3446df2..95a7a5eb 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -450,8 +450,9 @@ RangeNode: exports.RangeNode: inherit Node, { # part of a comprehension, slice, or splice. # TODO: This generates pretty ugly code ... shrink it. compile_array: (o) -> - body: Expressions.wrap([new LiteralNode('i')]) - arr: Expressions.wrap([new ForNode(body, {source: (new ValueNode(this))}, new LiteralNode('i'))]) + name: o.scope.free_variable() + body: Expressions.wrap([new LiteralNode(name)]) + arr: Expressions.wrap([new ForNode(body, {source: (new ValueNode(this))}, new LiteralNode(name))]) (new ParentheticalNode(new CallNode(new CodeNode([], arr)))).compile(o) }