fix up drop_unused()
This commit is contained in:
@@ -1569,7 +1569,6 @@ merge(Compressor.prototype, {
|
|||||||
if (compressor.has_directive("use asm")) return self;
|
if (compressor.has_directive("use asm")) return self;
|
||||||
var toplevel = compressor.option("toplevel");
|
var toplevel = compressor.option("toplevel");
|
||||||
if (compressor.option("unused")
|
if (compressor.option("unused")
|
||||||
&& (!(self instanceof AST_Toplevel) || toplevel)
|
|
||||||
&& !self.uses_eval
|
&& !self.uses_eval
|
||||||
&& !self.uses_with) {
|
&& !self.uses_with) {
|
||||||
var assign_as_unused = !/keep_assign/.test(compressor.option("unused"));
|
var assign_as_unused = !/keep_assign/.test(compressor.option("unused"));
|
||||||
@@ -1596,16 +1595,14 @@ merge(Compressor.prototype, {
|
|||||||
var scope = this;
|
var scope = this;
|
||||||
var tw = new TreeWalker(function(node, descend){
|
var tw = new TreeWalker(function(node, descend){
|
||||||
if (node !== self) {
|
if (node !== self) {
|
||||||
if (node instanceof AST_Defun) {
|
if (node instanceof AST_Defun || node instanceof AST_DefClass) {
|
||||||
if (!drop_funcs && scope === self) {
|
if (!drop_funcs && scope === self) {
|
||||||
var node_def = node.name.definition();
|
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_ids[node_def.id] = true;
|
||||||
in_use.push(node_def);
|
in_use.push(node_def);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (node instanceof AST_Defun || node instanceof AST_DefClass) {
|
|
||||||
initializations.add(node.name.name, node);
|
initializations.add(node.name.name, node);
|
||||||
return true; // don't go in nested scopes
|
return true; // don't go in nested scopes
|
||||||
}
|
}
|
||||||
@@ -1613,7 +1610,7 @@ merge(Compressor.prototype, {
|
|||||||
node.definitions.forEach(function(def){
|
node.definitions.forEach(function(def){
|
||||||
if (!drop_vars) {
|
if (!drop_vars) {
|
||||||
var node_def = def.name.definition();
|
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_ids[node_def.id] = true;
|
||||||
in_use.push(node_def);
|
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) {
|
if ((node instanceof AST_Defun || node instanceof AST_DefClass) && node !== self) {
|
||||||
var keep = (node.name.definition().id in in_use_ids) || node.name.definition().global;
|
var keep = (node.name.definition().id in in_use_ids) || !drop_funcs && node.name.definition().global;
|
||||||
if (!keep) {
|
if (!keep) {
|
||||||
compressor.warn("Dropping unused function {name} [{file}:{line},{col}]", {
|
compressor.warn("Dropping unused function {name} [{file}:{line},{col}]", {
|
||||||
name : node.name.name,
|
name : node.name.name,
|
||||||
@@ -1767,11 +1764,11 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
return node;
|
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){
|
var def = node.definitions.filter(function(def){
|
||||||
if (def.is_destructuring()) return true;
|
if (def.is_destructuring()) return true;
|
||||||
if (def.name.definition().id in in_use_ids) 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 = {
|
var w = {
|
||||||
name : def.name.name,
|
name : def.name.name,
|
||||||
@@ -1833,12 +1830,14 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
if (drop_vars && assign_as_unused
|
if (assign_as_unused
|
||||||
&& node instanceof AST_Assign
|
&& node instanceof AST_Assign
|
||||||
&& node.operator == "="
|
&& node.operator == "="
|
||||||
&& node.left instanceof AST_SymbolRef) {
|
&& node.left instanceof AST_SymbolRef) {
|
||||||
var def = node.left.definition();
|
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;
|
return node.right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user