&& alt_tail instanceof AST_Assign
&& seq_tail.operator == alt_tail.operator
&& seq_tail.left.equivalent_to(alt_tail.left)
- && (is_eq && !seq_tail.left.has_side_effects(compressor)
+ && (is_eq && seq_tail.left instanceof AST_SymbolRef
|| !condition.has_side_effects(compressor)
&& can_shift_lhs_of_tail(consequent)
&& can_shift_lhs_of_tail(alternative))) {
}
function can_shift_lhs_of_tail(node) {
- if (node === node.tail_node()) return true;
- var exprs = node.expressions;
- for (var i = exprs.length - 1; --i >= 0;) {
- var expr = exprs[i];
- if (!(expr instanceof AST_Assign) && expr.has_side_effects(compressor)
- || expr.operator != "="
- || expr.left.has_side_effects(compressor)
- || expr.right.has_side_effects(compressor)) return false;
- }
- return true;
+ return node === node.tail_node() || all(node.expressions.slice(0, -1), function(expr) {
+ return !expr.has_side_effects(compressor);
+ });
}
function pop_lhs(node) {