fix & extend join_vars for object assigments (#2781)
This commit is contained in:
@@ -1712,6 +1712,7 @@ merge(Compressor.prototype, {
|
||||
do {
|
||||
var node = exprs[0];
|
||||
if (!(node instanceof AST_Assign)) break;
|
||||
if (node.operator != "=") break;
|
||||
if (!(node.left instanceof AST_PropAccess)) break;
|
||||
var sym = node.left.expression;
|
||||
if (!(sym instanceof AST_SymbolRef)) break;
|
||||
@@ -1748,8 +1749,26 @@ merge(Compressor.prototype, {
|
||||
statements[++j] = stat;
|
||||
defs = stat;
|
||||
}
|
||||
} else if (stat instanceof AST_Exit) {
|
||||
var exprs = join_object_assignments(prev, stat.value);
|
||||
if (exprs) {
|
||||
CHANGED = true;
|
||||
if (exprs.length) {
|
||||
stat.value = make_sequence(stat.value, exprs);
|
||||
} else if (stat.value instanceof AST_Sequence) {
|
||||
stat.value = stat.value.tail_node().left;
|
||||
} else {
|
||||
stat.value = stat.value.left;
|
||||
}
|
||||
}
|
||||
statements[++j] = stat;
|
||||
} else if (stat instanceof AST_For) {
|
||||
if (prev instanceof AST_Var && (!stat.init || stat.init.TYPE == prev.TYPE)) {
|
||||
var exprs = join_object_assignments(prev, stat.init);
|
||||
if (exprs) {
|
||||
CHANGED = true;
|
||||
stat.init = exprs.length ? make_sequence(stat.init, exprs) : null;
|
||||
statements[++j] = stat;
|
||||
} else if (prev instanceof AST_Var && (!stat.init || stat.init.TYPE == prev.TYPE)) {
|
||||
if (stat.init) {
|
||||
prev.definitions = prev.definitions.concat(stat.init.definitions);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user