Passing the arguments object directly when generating a closure.

This commit is contained in:
Timothy Jones
2010-10-24 01:20:16 +13:00
parent e6fb3bcffb
commit 7b887f065d
3 changed files with 12 additions and 11 deletions

View File

@@ -1734,19 +1734,19 @@
};
Closure = {
wrap: function(expressions, statement, noReturn) {
var args, call, func, mentionsArgs, meth;
var args, call, func, mentionsArgs;
if (expressions.containsPureStatement()) {
return expressions;
}
func = new Parens(new Code([], Expressions.wrap([expressions])));
mentionsArgs = expressions.contains(this.literalArgs);
func = new Parens(new Code((mentionsArgs ? [new Literal('arguments')] : []), Expressions.wrap([expressions])));
args = [];
if ((mentionsArgs = expressions.contains(this.literalArgs)) || (expressions.contains(this.literalThis))) {
meth = new Literal(mentionsArgs ? 'apply' : 'call');
if (mentionsArgs || expressions.contains(this.literalThis)) {
args = [new Literal('this')];
if (mentionsArgs) {
args.push(new Literal('arguments'));
}
func = new Value(func, [new Accessor(meth)]);
func = new Value(func, [new Accessor(new Literal('call'))]);
func.noReturn = noReturn;
}
call = new Call(func, args);