fix corner cases in varify (#4719)
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user