aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ast.js8
-rw-r--r--test/compress/evaluate.js31
2 files changed, 39 insertions, 0 deletions
diff --git a/lib/ast.js b/lib/ast.js
index 6205cc77..5e1fbbb9 100644
--- a/lib/ast.js
+++ b/lib/ast.js
@@ -979,6 +979,14 @@ TreeWalker.prototype = {
|| p instanceof AST_Conditional
|| p.tail_node() === self) {
self = p;
+ } else if (p instanceof AST_Return) {
+ var fn;
+ do {
+ fn = this.parent(++i);
+ if (!fn) return false;
+ } while (!(fn instanceof AST_Lambda));
+ self = this.parent(++i);
+ if (!self || self.TYPE != "Call" || self.expression !== fn) return false;
} else {
return false;
}
diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js
index 0ac117fe..22c87b70 100644
--- a/test/compress/evaluate.js
+++ b/test/compress/evaluate.js
@@ -1757,3 +1757,34 @@ issue_3387_2: {
}
expect_stdout: "NaN"
}
+
+iife_boolean_context: {
+ options = {
+ booleans: true,
+ evaluate: true,
+ }
+ input: {
+ console.log(function() {
+ return Object(1) || false;
+ }() ? "PASS" : "FAIL");
+ console.log(function() {
+ return [].length || true;
+ }() ? "PASS" : "FAIL");
+ }
+ expect: {
+ console.log(function() {
+ return Object(1);
+ }() ? "PASS" : "FAIL");
+ console.log(function() {
+ return [].length, 1;
+ }() ? "PASS" : "FAIL");
+ }
+ expect_stdout: [
+ "PASS",
+ "PASS",
+ ]
+ expect_warnings: [
+ "WARN: Dropping side-effect-free || [test/compress/evaluate.js:2,19]",
+ "WARN: Boolean || always true [test/compress/evaluate.js:5,19]",
+ ]
+}