fix uses_arguments handling (broken since 6605d15783)
Using the symbol declaration tracking of UglifyJS doesn't make sense here anyway, `arguments` always comes from something in the current scope. fixes #1299
This commit is contained in:
committed by
Richard van Velzen
parent
e51c6ba380
commit
266ddd9639
@@ -204,6 +204,9 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
var sym = node.scope.find_variable(name);
|
var sym = node.scope.find_variable(name);
|
||||||
|
if (node.scope instanceof AST_Lambda && name == "arguments") {
|
||||||
|
node.scope.uses_arguments = true;
|
||||||
|
}
|
||||||
if (!sym) {
|
if (!sym) {
|
||||||
var g;
|
var g;
|
||||||
if (globals.has(name)) {
|
if (globals.has(name)) {
|
||||||
@@ -215,9 +218,6 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
|
|||||||
globals.set(name, g);
|
globals.set(name, g);
|
||||||
}
|
}
|
||||||
sym = g;
|
sym = g;
|
||||||
if (func && name == "arguments") {
|
|
||||||
func.uses_arguments = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
node.thedef = sym;
|
node.thedef = sym;
|
||||||
if (parent instanceof AST_Unary && (parent.operator === '++' || parent.operator === '--')
|
if (parent instanceof AST_Unary && (parent.operator === '++' || parent.operator === '--')
|
||||||
|
|||||||
@@ -19,4 +19,12 @@ describe("arguments", function() {
|
|||||||
value // Select function as scope
|
value // Select function as scope
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("Should recognize when a function uses arguments", function() {
|
||||||
|
var ast = UglifyJS.parse("function a(){function b(){function c(){}; return arguments[0];}}");
|
||||||
|
ast.figure_out_scope();
|
||||||
|
assert.strictEqual(ast.body[0].uses_arguments, false);
|
||||||
|
assert.strictEqual(ast.body[0].body[0].uses_arguments, true);
|
||||||
|
assert.strictEqual(ast.body[0].body[0].body[0].uses_arguments, false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user