fix up drop_unused()

This commit is contained in:
alexlamsl
2017-02-27 05:11:01 +08:00
parent 88a338f29e
commit b3a987b0df

View File

@@ -1569,7 +1569,6 @@ merge(Compressor.prototype, {
if (compressor.has_directive("use asm")) return self;
var toplevel = compressor.option("toplevel");
if (compressor.option("unused")
&& (!(self instanceof AST_Toplevel) || toplevel)
&& !self.uses_eval
&& !self.uses_with) {
var assign_as_unused = !/keep_assign/.test(compressor.option("unused"));
@@ -1596,16 +1595,14 @@ merge(Compressor.prototype, {
var scope = this;
var tw = new TreeWalker(function(node, descend){
if (node !== self) {
if (node instanceof AST_Defun) {
if (node instanceof AST_Defun || node instanceof AST_DefClass) {
if (!drop_funcs && scope === self) {
var node_def = node.name.definition();
if (!(node_def.id in in_use_ids)) {
if (node_def.global && !(node_def.id in in_use_ids)) {
in_use_ids[node_def.id] = true;
in_use.push(node_def);
}
}
}
if (node instanceof AST_Defun || node instanceof AST_DefClass) {
initializations.add(node.name.name, node);
return true; // don't go in nested scopes
}
@@ -1613,7 +1610,7 @@ merge(Compressor.prototype, {
node.definitions.forEach(function(def){
if (!drop_vars) {
var node_def = def.name.definition();
if (!(node_def.id in in_use_ids)) {
if (node_def.global && !(node_def.id in in_use_ids)) {
in_use_ids[node_def.id] = true;
in_use.push(node_def);
}
@@ -1754,8 +1751,8 @@ merge(Compressor.prototype, {
}
}
}
if (drop_funcs && (node instanceof AST_Defun || node instanceof AST_DefClass) && node !== self) {
var keep = (node.name.definition().id in in_use_ids) || node.name.definition().global;
if ((node instanceof AST_Defun || node instanceof AST_DefClass) && node !== self) {
var keep = (node.name.definition().id in in_use_ids) || !drop_funcs && node.name.definition().global;
if (!keep) {
compressor.warn("Dropping unused function {name} [{file}:{line},{col}]", {
name : node.name.name,
@@ -1767,11 +1764,11 @@ merge(Compressor.prototype, {
}
return node;
}
if (drop_vars && node instanceof AST_Definitions && !(tt.parent() instanceof AST_ForIn)) {
if (node instanceof AST_Definitions && !(tt.parent() instanceof AST_ForIn)) {
var def = node.definitions.filter(function(def){
if (def.is_destructuring()) return true;
if (def.name.definition().id in in_use_ids) return true;
if (def.name.definition().global) return true;
if (!drop_vars && def.name.definition().global) return true;
var w = {
name : def.name.name,
@@ -1833,12 +1830,14 @@ merge(Compressor.prototype, {
}
return node;
}
if (drop_vars && assign_as_unused
if (assign_as_unused
&& node instanceof AST_Assign
&& node.operator == "="
&& node.left instanceof AST_SymbolRef) {
var def = node.left.definition();
if (!(def.id in in_use_ids) && self.variables.get(def.name) === def) {
if ((drop_vars || !def.global)
&& !(def.id in in_use_ids)
&& self.variables.get(def.name) === def) {
return node.right;
}
}