deduplicate declarations regardless of toplevel (#2393)
This commit is contained in:
@@ -2240,7 +2240,6 @@ merge(Compressor.prototype, {
|
|||||||
if (self.uses_eval || self.uses_with) return;
|
if (self.uses_eval || self.uses_with) return;
|
||||||
var drop_funcs = !(self instanceof AST_Toplevel) || compressor.toplevel.funcs;
|
var drop_funcs = !(self instanceof AST_Toplevel) || compressor.toplevel.funcs;
|
||||||
var drop_vars = !(self instanceof AST_Toplevel) || compressor.toplevel.vars;
|
var drop_vars = !(self instanceof AST_Toplevel) || compressor.toplevel.vars;
|
||||||
if (!drop_funcs && !drop_vars) return;
|
|
||||||
var assign_as_unused = /keep_assign/.test(compressor.option("unused")) ? return_false : function(node) {
|
var assign_as_unused = /keep_assign/.test(compressor.option("unused")) ? return_false : function(node) {
|
||||||
if (node instanceof AST_Assign && (node.write_only || node.operator == "=")) {
|
if (node instanceof AST_Assign && (node.write_only || node.operator == "=")) {
|
||||||
return node.left;
|
return node.left;
|
||||||
@@ -2375,7 +2374,8 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
if (drop_vars && node instanceof AST_Definitions && !(tt.parent() instanceof AST_ForIn && tt.parent().init === node)) {
|
var parent = tt.parent();
|
||||||
|
if (node instanceof AST_Definitions && !(parent instanceof AST_ForIn && parent.init === node)) {
|
||||||
// place uninitialized names at the start
|
// place uninitialized names at the start
|
||||||
var body = [], head = [], tail = [];
|
var body = [], head = [], tail = [];
|
||||||
// for unused names whose initialization has
|
// for unused names whose initialization has
|
||||||
@@ -2385,7 +2385,7 @@ merge(Compressor.prototype, {
|
|||||||
node.definitions.forEach(function(def) {
|
node.definitions.forEach(function(def) {
|
||||||
if (def.value) def.value = def.value.transform(tt);
|
if (def.value) def.value = def.value.transform(tt);
|
||||||
var sym = def.name.definition();
|
var sym = def.name.definition();
|
||||||
if (sym.id in in_use_ids) {
|
if (!drop_vars || sym.id in in_use_ids) {
|
||||||
if (def.name instanceof AST_SymbolVar) {
|
if (def.name instanceof AST_SymbolVar) {
|
||||||
var var_defs = var_defs_by_id.get(sym.id);
|
var var_defs = var_defs_by_id.get(sym.id);
|
||||||
if (var_defs.length > 1 && !def.value) {
|
if (var_defs.length > 1 && !def.value) {
|
||||||
@@ -2467,7 +2467,7 @@ merge(Compressor.prototype, {
|
|||||||
&& !((def = def.definition()).id in in_use_ids)
|
&& !((def = def.definition()).id in in_use_ids)
|
||||||
&& self.variables.get(def.name) === def) {
|
&& self.variables.get(def.name) === def) {
|
||||||
if (node instanceof AST_Assign) {
|
if (node instanceof AST_Assign) {
|
||||||
return maintain_this_binding(tt.parent(), node, node.right.transform(tt));
|
return maintain_this_binding(parent, node, node.right.transform(tt));
|
||||||
}
|
}
|
||||||
return make_node(AST_Number, node, {
|
return make_node(AST_Number, node, {
|
||||||
value: 0
|
value: 0
|
||||||
|
|||||||
@@ -2051,7 +2051,7 @@ inner_lvalues: {
|
|||||||
console.log(null, a, b);
|
console.log(null, a, b);
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
var a, b = 10;
|
var b = 10;
|
||||||
var a = (--b || a || 3).toString(), c = --b + -a;
|
var a = (--b || a || 3).toString(), c = --b + -a;
|
||||||
console.log(null, a, b);
|
console.log(null, a, b);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user