fix unsafe escape analysis in reduce_vars (#2387)

This commit is contained in:
Alex Lam S.L
2017-10-22 03:23:31 +08:00
committed by GitHub
parent 96439ca246
commit 011123223b
4 changed files with 85 additions and 45 deletions

View File

@@ -327,13 +327,7 @@ merge(Compressor.prototype, {
d.fixed = false;
}
} else {
var parent = tw.parent();
if (parent instanceof AST_Assign && parent.operator == "=" && node === parent.right
|| parent instanceof AST_Call && node !== parent.expression
|| parent instanceof AST_Return && node === parent.value && node.scope !== d.scope
|| parent instanceof AST_VarDef && node === parent.value) {
d.escaped = true;
}
mark_escaped(d, node, 0);
}
}
}
@@ -579,6 +573,18 @@ merge(Compressor.prototype, {
return !immutable && is_modified(parent, level + 1);
}
}
function mark_escaped(d, node, level) {
var parent = tw.parent(level);
if (parent instanceof AST_Assign && parent.operator == "=" && node === parent.right
|| parent instanceof AST_Call && node !== parent.expression
|| parent instanceof AST_Return && node === parent.value && node.scope !== d.scope
|| parent instanceof AST_VarDef && node === parent.value) {
d.escaped = true;
} else if (parent instanceof AST_PropAccess && node === parent.expression) {
mark_escaped(d, parent, level + 1);
}
}
});
AST_SymbolRef.DEFMETHOD("fixed_value", function() {