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

View File

@@ -5115,3 +5115,29 @@ issue_4233: {
} }
expect_stdout: "number" expect_stdout: "number"
} }
issue_4259: {
options = {
collapse_vars: true,
functions: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var a = function b() {
var c = b;
for (b in c);
};
a();
console.log(typeof a);
}
expect: {
function a() {
for (a in a);
}
a();
console.log(typeof a);
}
expect_stdout: "function"
}

View File

@@ -1999,7 +1999,7 @@ issue_1606: {
var a, b; var a, b;
function g(){}; function g(){};
b = 2; b = 2;
x(b); x(2);
} }
} }
} }