fix corner case in collapse_vars

fixes #5389
This commit is contained in:
alexlamsl 2022-03-22 11:29:45 +08:00
parent a8e040b133
commit 63a53dd417
3 changed files with 35 additions and 1 deletions

View File

@ -851,6 +851,9 @@ var AST_DefClass = DEFNODE("DefClass", null, {
$propdoc: {
name: "[AST_SymbolDefClass] the name of this class",
},
resolve: function(def_class) {
return def_class ? this : this.parent_scope.resolve();
},
_validate: function() {
if (!(this.name instanceof AST_SymbolDefClass)) throw new Error("name must be AST_SymbolDefClass");
},

View File

@ -3269,7 +3269,7 @@ Compressor.prototype.compress = function(node) {
if (def.scope.resolve() !== scope) return true;
if (modify_toplevel && compressor.exposed(def)) return true;
return !all(def.references, function(ref) {
return ref.scope.resolve() === scope;
return ref.scope.resolve(true) === scope;
});
}

View File

@ -2538,3 +2538,34 @@ issue_5387: {
expect_stdout: "PASS"
node_version: ">=4"
}
issue_5389: {
options = {
collapse_vars: true,
toplevel: true,
}
input: {
function log(m, n) {
console.log(m, n);
}
var a = log;
class A {
[a = "FAIL"] = a = "PASS";
}
var b = new A();
log(a, b.FAIL);
}
expect: {
function log(m, n) {
console.log(m, n);
}
var a = log;
class A {
[a = "FAIL"] = a = "PASS";
}
var b = new A();
log(a, b.FAIL);
}
expect_stdout: "PASS PASS"
node_version: ">=12"
}