fix corner cases in varify (#4719)

This commit is contained in:
Alex Lam S.L
2021-03-02 15:33:58 +00:00
committed by GitHub
parent b1e05fd48a
commit adcafce048
3 changed files with 115 additions and 15 deletions

View File

@@ -7723,7 +7723,10 @@ merge(Compressor.prototype, {
var name = self.init.definitions[0].name;
if ((name instanceof AST_Destructured || name instanceof AST_SymbolLet)
&& !name.match_symbol(function(node) {
if (node instanceof AST_SymbolDeclaration) return may_overlap(compressor, node.definition());
if (node instanceof AST_SymbolDeclaration) {
var def = node.definition();
return !same_scope(def) || may_overlap(compressor, def);
}
}, true)) {
self.init = to_var(self.init);
}
@@ -8269,7 +8272,7 @@ merge(Compressor.prototype, {
function can_varify(compressor, sym) {
if (!sym.fixed_value()) return false;
var def = sym.definition();
return is_safe_lexical(def) && !may_overlap(compressor, def);
return is_safe_lexical(def) && same_scope(def) && !may_overlap(compressor, def);
}
function varify(self, compressor) {
@@ -10214,6 +10217,13 @@ merge(Compressor.prototype, {
} while (node = compressor.parent(level++));
}
function same_scope(def) {
var scope = def.scope.resolve();
return all(def.references, function(ref) {
return scope === ref.scope.resolve();
});
}
OPT(AST_SymbolRef, function(self, compressor) {
if (!compressor.option("ie8")
&& is_undeclared_ref(self)
@@ -10380,13 +10390,6 @@ merge(Compressor.prototype, {
}
return self;
function same_scope(def) {
var scope = def.scope.resolve();
return all(def.references, function(ref) {
return scope === ref.scope.resolve();
});
}
function has_symbol_ref(value) {
var found;
value.walk(new TreeWalker(function(node) {