avoid arguments and eval in reduce_vars (#1924)

fixes #1922
This commit is contained in:
Alex Lam S.L
2017-05-12 12:34:55 +08:00
committed by alexlamsl
parent aa7e8783f8
commit f631d6437a
2 changed files with 63 additions and 10 deletions

View File

@@ -326,10 +326,14 @@ merge(Compressor.prototype, {
// So existing transformation rules can work on them.
node.argnames.forEach(function(arg, i) {
var d = arg.definition();
d.fixed = function() {
return iife.args[i] || make_node(AST_Undefined, iife);
};
mark(d, true);
if (!node.uses_arguments && d.fixed === undefined) {
d.fixed = function() {
return iife.args[i] || make_node(AST_Undefined, iife);
};
mark(d, true);
} else {
d.fixed = false;
}
});
}
if (node instanceof AST_If || node instanceof AST_DWLoop) {
@@ -414,7 +418,9 @@ merge(Compressor.prototype, {
function reset_def(def) {
def.escaped = false;
if (toplevel || !def.global || def.orig[0] instanceof AST_SymbolConst) {
if (def.scope.uses_eval) {
def.fixed = false;
} else if (toplevel || !def.global || def.orig[0] instanceof AST_SymbolConst) {
def.fixed = undefined;
} else {
def.fixed = false;