fix corner case in hoist_vars (#4894)

fixes #4893
This commit is contained in:
Alex Lam S.L
2021-05-02 00:28:31 +01:00
committed by GitHub
parent 6ab26eef6c
commit fb03561799
4 changed files with 87 additions and 8 deletions

View File

@@ -1793,7 +1793,7 @@ merge(Compressor.prototype, {
return make_node(AST_Assign, candidate, { return make_node(AST_Assign, candidate, {
operator: "=", operator: "=",
left: make_node(AST_SymbolRef, candidate.name, candidate.name), left: make_node(AST_SymbolRef, candidate.name, candidate.name),
right: candidate.value right: candidate.value,
}); });
} }
var assign = candidate; var assign = candidate;
@@ -8433,6 +8433,7 @@ 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;
a.push(make_node(AST_Assign, defn, { a.push(make_node(AST_Assign, defn, {
operator: "=", operator: "=",
left: name, left: name,

View File

@@ -295,3 +295,81 @@ issue_4859: {
} }
expect_stdout: "Infinity" expect_stdout: "Infinity"
} }
issue_4893_1: {
options = {
collapse_vars: true,
evaluate: true,
hoist_vars: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
function g() {}
var a = null;
var b = null;
var c = null;
b.p += a = 42;
f;
}
try {
f();
} catch (e) {
console.log("PASS");
}
}
expect: {
try{
(function f() {
var b;
b = null;
b.p += 42;
f;
})();
} catch (e) {
console.log("PASS");
}
}
expect_stdout: "PASS"
}
issue_4893_2: {
options = {
collapse_vars: true,
hoist_vars: true,
pure_getters: "strict",
reduce_vars: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
function f() {
function g() {}
var a = null;
var b = null;
var c = null;
b.p += a = 42;
f;
}
try {
f();
} catch (e) {
console.log("PASS");
}
}
expect: {
try{
(function() {
var b;
b = null;
b.p += 42;
})();
} catch (e) {
console.log("PASS");
}
}
expect_stdout: "PASS"
}