diff options
-rw-r--r-- | lib/compress.js | 8 | ||||
-rw-r--r-- | test/compress/conditionals.js | 35 |
2 files changed, 39 insertions, 4 deletions
diff --git a/lib/compress.js b/lib/compress.js index 02b9e243..efdc6d83 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -833,17 +833,17 @@ function Compressor(options, false_by_default) { && index < block.length - 1) { if (compressor.parent() instanceof AST_Lambda) { var rest = tighten_body(block.slice(index + 1), compressor); - var cond = negated_is_best ? negated : self.condition.negate(compressor); + var cond = self.condition; while (rest[0] instanceof AST_If && rest[0].body instanceof AST_Return && !rest[0].alternative) { cond = make_node(AST_Binary, rest[0], { - operator: "&&", + operator: "||", left: cond, - right: rest[0].condition.negate(compressor) + right: rest[0].condition }); rest.shift(); } return MAP.last(make_node(AST_If, self, { - condition: cond, + condition: cond.negate(compressor), body: make_node(AST_BlockStatement, block[index + 1], { body: rest }).optimize(compressor) diff --git a/test/compress/conditionals.js b/test/compress/conditionals.js index b9c348a0..54c0751d 100644 --- a/test/compress/conditionals.js +++ b/test/compress/conditionals.js @@ -87,3 +87,38 @@ ifs_4: { x(foo)[10].bar.baz = (foo && bar) ? something() : something_else(); } } + +ifs_5: { + options = { + conditionals: true + }; + input: { + function f() { + if (foo) return; + bar(); + baz(); + } + function g() { + if (foo) return; + if (bar) return; + if (baz) return; + if (baa) return; + a(); + b() + } + } + expect: { + function f() { + if (!foo) { + bar(); + baz(); + } + } + function g() { + if (!(foo || bar || baz || baa)) { + a(); + b() + } + } + } +} |