fix corner case in sequences (#4073)
This commit is contained in:
@@ -554,13 +554,6 @@ merge(Compressor.prototype, {
|
||||
if (is_arguments(def) && node.property instanceof AST_Number) def.reassigned = true;
|
||||
}
|
||||
|
||||
var suppressor = new TreeWalker(function(node) {
|
||||
if (!(node instanceof AST_Symbol)) return;
|
||||
var d = node.definition();
|
||||
if (!d) return;
|
||||
if (node instanceof AST_SymbolRef) push_ref(d, node);
|
||||
d.fixed = false;
|
||||
});
|
||||
def(AST_Accessor, function(tw, descend, compressor) {
|
||||
push(tw);
|
||||
reset_variables(tw, compressor, this);
|
||||
@@ -740,11 +733,19 @@ merge(Compressor.prototype, {
|
||||
return true;
|
||||
});
|
||||
def(AST_ForIn, function(tw) {
|
||||
this.init.walk(suppressor);
|
||||
this.object.walk(tw);
|
||||
var saved_loop = tw.in_loop;
|
||||
tw.in_loop = this;
|
||||
push(tw);
|
||||
var init = this.init;
|
||||
init.walk(tw);
|
||||
if (init instanceof AST_Var) {
|
||||
init = init.definitions[0].name;
|
||||
} else while (init instanceof AST_PropAccess) {
|
||||
init = init.expression.tail_node();
|
||||
}
|
||||
var def = init.definition();
|
||||
if (def) def.fixed = false;
|
||||
this.body.walk(tw);
|
||||
pop(tw);
|
||||
tw.in_loop = saved_loop;
|
||||
@@ -8521,7 +8522,9 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
}
|
||||
if (is_lhs(compressor.self(), parent)) return self;
|
||||
if (compressor.option("sequences") && compressor.parent().TYPE != "Call") {
|
||||
if (compressor.option("sequences")
|
||||
&& parent.TYPE != "Call"
|
||||
&& !(parent instanceof AST_ForIn && parent.init === self)) {
|
||||
var seq = lift_sequence_in_expression(self, compressor);
|
||||
if (seq !== self) return seq.optimize(compressor);
|
||||
}
|
||||
@@ -8632,8 +8635,11 @@ merge(Compressor.prototype, {
|
||||
col: self.start.col
|
||||
});
|
||||
}
|
||||
if (is_lhs(compressor.self(), compressor.parent())) return self;
|
||||
if (compressor.option("sequences") && compressor.parent().TYPE != "Call") {
|
||||
var parent = compressor.parent();
|
||||
if (is_lhs(compressor.self(), parent)) return self;
|
||||
if (compressor.option("sequences")
|
||||
&& parent.TYPE != "Call"
|
||||
&& !(parent instanceof AST_ForIn && parent.init === self)) {
|
||||
var seq = lift_sequence_in_expression(self, compressor);
|
||||
if (seq !== self) return seq.optimize(compressor);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user