fix up drop_unused()
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user