removing the 'var' declaration from arguments-to-array conversions

This commit is contained in:
Jeremy Ashkenas 2010-02-21 16:15:01 -05:00
parent 6e15a4da0e
commit dbe5328c33
2 changed files with 3 additions and 5 deletions

View File

@ -230,14 +230,13 @@
// Compile the expressions body, with declarations of all inner variables
// pushed up to the top.
compile_with_declarations: function compile_with_declarations(o) {
var args, argv, code;
var args, code;
code = this.compile_node(o);
args = this.contains(function(node) {
return node instanceof ValueNode && node.is_arguments();
});
argv = args && o.scope.check('arguments') ? '' : 'var ';
if (args) {
code = this.idt() + argv + "arguments = Array.prototype.slice.call(arguments, 0);\n" + code;
code = this.idt() + "arguments = Array.prototype.slice.call(arguments, 0);\n" + code;
}
if (o.scope.has_assignments(this)) {
code = this.idt() + 'var ' + o.scope.compiled_assignments() + ";\n" + code;

View File

@ -156,8 +156,7 @@ Expressions: exports.Expressions: inherit Node, {
compile_with_declarations: (o) ->
code: @compile_node(o)
args: @contains (node) -> node instanceof ValueNode and node.is_arguments()
argv: if args and o.scope.check('arguments') then '' else 'var '
code: @idt() + argv + "arguments = Array.prototype.slice.call(arguments, 0);\n" + code if args
code: @idt() + "arguments = Array.prototype.slice.call(arguments, 0);\n" + code if args
code: @idt() + 'var ' + o.scope.compiled_assignments() + ";\n" + code if o.scope.has_assignments(this)
code: @idt() + 'var ' + o.scope.compiled_declarations() + ";\n" + code if o.scope.has_declarations(this)
code