fix corner case in functions (#4260)

fixes #4259
This commit is contained in:
Alex Lam S.L
2020-11-05 19:55:25 +00:00
committed by GitHub
parent af4ea3ff69
commit c2f6fd5fde
3 changed files with 39 additions and 14 deletions

View File

@@ -1424,8 +1424,9 @@ merge(Compressor.prototype, {
if (!--replaced) abort = true;
if (is_lhs(node, multi_replacer.parent())) return node;
def.replaced++;
value_def.replaced--;
return rvalue.clone();
var ref = rvalue.clone();
value_def.references.push(ref);
return ref;
}
// Skip (non-executed) functions and (leading) default case in switch statements
if (node instanceof AST_Default || node instanceof AST_Scope) return node;
@@ -5433,7 +5434,7 @@ merge(Compressor.prototype, {
vars.set(def.name.name, def);
++vars_found;
});
var seq = node.to_assignments(compressor);
var seq = node.to_assignments();
var p = tt.parent();
if (p instanceof AST_ForIn && p.init === node) {
if (seq) return seq;
@@ -6716,21 +6717,19 @@ merge(Compressor.prototype, {
AST_Let.DEFMETHOD("remove_initializers", remove_initializers);
AST_Var.DEFMETHOD("remove_initializers", remove_initializers);
AST_Definitions.DEFMETHOD("to_assignments", function(compressor) {
var reduce_vars = compressor.option("reduce_vars");
var assignments = this.definitions.reduce(function(a, def) {
if (def.value) {
var name = make_node(AST_SymbolRef, def.name, def.name);
a.push(make_node(AST_Assign, def, {
AST_Definitions.DEFMETHOD("to_assignments", function() {
var assignments = this.definitions.reduce(function(a, defn) {
var def = defn.name.definition();
if (defn.value) {
var name = make_node(AST_SymbolRef, defn.name, defn.name);
a.push(make_node(AST_Assign, defn, {
operator : "=",
left : name,
right : def.value
right : defn.value
}));
if (reduce_vars) name.definition().fixed = false;
def.references.push(name);
}
def = def.name.definition();
def.eliminated++;
def.replaced--;
return a;
}, []);
if (assignments.length == 0) return null;