fix corner case in hoist_vars (#5864)

fixes #5863
This commit is contained in:
Alex Lam S.L
2024-06-25 19:19:47 +03:00
committed by GitHub
parent 205a1d1f19
commit 6669ea19ef
2 changed files with 36 additions and 6 deletions

View File

@@ -8484,7 +8484,8 @@ Compressor.prototype.compress = function(node) {
&& self.find_variable(sym.name) === sym.definition();
})) return node;
node.definitions.forEach(function(defn) {
vars.set(defn.name.name, defn);
var name = defn.name.name;
if (!vars.has(name)) vars.set(name, defn);
});
var seq = node.to_assignments();
if (p instanceof AST_ForEnumeration && p.init === node) {
@@ -8511,13 +8512,14 @@ Compressor.prototype.compress = function(node) {
return !ref.in_arg;
})) vars.del(argname.name);
});
vars.each(function(defn, name) {
vars.each(function(defn) {
var name = defn.name;
defn = defn.clone();
defn.name = defn.name.clone();
defn.name = name.clone();
defn.value = null;
defns.push(defn);
vars.set(name, defn);
defn.name.definition().orig.unshift(defn.name);
var orig = name.definition().orig;
orig.splice(orig.indexOf(name), 0, defn.name);
});
if (defns.length > 0) hoisted.push(make_node(AST_Var, self, { definitions: defns }));
}
@@ -10348,8 +10350,8 @@ Compressor.prototype.compress = function(node) {
}
});
def.references.push(name);
def.assignments++;
}
def.assignments++;
def.eliminated++;
def.single_use = false;
return a;

View File

@@ -3107,3 +3107,31 @@ issue_5774: {
expect_stdout: "PASS"
node_version: ">=6"
}
issue_5863: {
options = {
collapse_vars: true,
hoist_vars: true,
}
input: {
console.log(typeof function f(a = function() {
f = 42;
return f;
}()) {
var f;
var f;
return a;
}());
}
expect: {
console.log(typeof function f(a = function() {
f = 42;
return f;
}()) {
var f;
return a;
}());
}
expect_stdout: "function"
node_version: ">=6"
}