fix corner case in hoist_vars (#4900)

fixes #4898
This commit is contained in:
Alex Lam S.L
2021-05-02 21:05:52 +01:00
committed by GitHub
parent 4114431eec
commit 203f4b7ad9
2 changed files with 36 additions and 5 deletions

View File

@@ -8438,12 +8438,20 @@ merge(Compressor.prototype, {
if (value) { if (value) {
if (value instanceof AST_Sequence) value = value.clone(); if (value instanceof AST_Sequence) value = value.clone();
var name = make_node(AST_SymbolRef, defn.name, defn.name); var name = make_node(AST_SymbolRef, defn.name, defn.name);
name.fixed = value; var assign = make_node(AST_Assign, defn, {
a.push(make_node(AST_Assign, defn, {
operator: "=", operator: "=",
left: name, left: name,
right: value, right: value,
})); });
a.push(assign);
name.fixed = function() {
return assign.right;
};
name.fixed.assigns = [ assign ];
def.references.forEach(function(ref) {
var assigns = ref.fixed && ref.fixed.assigns;
if (assigns && assigns[0] === defn) assigns[0] = assign;
});
def.references.push(name); def.references.push(name);
} }
def.eliminated++; def.eliminated++;

View File

@@ -232,9 +232,8 @@ issue_4736: {
expect: { expect: {
(function() { (function() {
(function() { (function() {
var b = 1 << 30;
0, 0,
console.log(b); console.log(1073741824);
})(); })();
})(); })();
} }
@@ -373,3 +372,27 @@ issue_4893_2: {
} }
expect_stdout: "PASS" expect_stdout: "PASS"
} }
issue_4898: {
options = {
collapse_vars: true,
evaluate: true,
hoist_vars: true,
loops: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
do {
var b = [ console.log("PASS") ];
var c = b;
} while (c.p = 0);
}
expect: {
var b;
b = [ console.log("PASS") ];
b.p = 0;
}
expect_stdout: "PASS"
}