aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkzc <zaxxon2011@gmail.com>2017-02-18 19:02:59 +0800
committeralexlamsl <alexlamsl@gmail.com>2017-02-21 13:29:57 +0800
commitd11dca3cf9e34302ce12a6c9f1cd81b22551f2ba (patch)
treeff896e3240b131545837b90d73487c4ffb8945ca
parente5badb954157d41dba3cc74f8813a90a145d9ca3 (diff)
downloadtracifyjs-d11dca3cf9e34302ce12a6c9f1cd81b22551f2ba.tar.gz
tracifyjs-d11dca3cf9e34302ce12a6c9f1cd81b22551f2ba.zip
fix stray else in compress with conditionals=false
closes #1449
-rw-r--r--lib/compress.js3
-rw-r--r--test/compress/issue-1447.js45
2 files changed, 47 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js
index b49ebef2..459256f5 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -1840,6 +1840,8 @@ merge(Compressor.prototype, {
});
OPT(AST_If, function(self, compressor){
+ if (is_empty(self.alternative)) self.alternative = null;
+
if (!compressor.option("conditionals")) return self;
// if condition can be statically determined, warn and drop
// one of the blocks. note, statically determined implies
@@ -1868,7 +1870,6 @@ merge(Compressor.prototype, {
}
}
}
- if (is_empty(self.alternative)) self.alternative = null;
var negated = self.condition.negate(compressor);
var self_condition_length = self.condition.print_to_string().length;
var negated_length = negated.print_to_string().length;
diff --git a/test/compress/issue-1447.js b/test/compress/issue-1447.js
new file mode 100644
index 00000000..163acbc2
--- /dev/null
+++ b/test/compress/issue-1447.js
@@ -0,0 +1,45 @@
+else_with_empty_block: {
+ options = {}
+ input: {
+ if (x)
+ yes();
+ else {
+ }
+ }
+ expect_exact: "if(x)yes();"
+}
+
+else_with_empty_statement: {
+ options = {}
+ input: {
+ if (x)
+ yes();
+ else
+ ;
+ }
+ expect_exact: "if(x)yes();"
+}
+
+conditional_false_stray_else_in_loop: {
+ options = {
+ evaluate : true,
+ comparisons : true,
+ booleans : true,
+ unused : true,
+ loops : true,
+ side_effects : true,
+ dead_code : true,
+ hoist_vars : true,
+ join_vars : true,
+ if_return : true,
+ cascade : true,
+ conditionals : false,
+ }
+ input: {
+ for (var i = 1; i <= 4; ++i) {
+ if (i <= 2) continue;
+ console.log(i);
+ }
+ }
+ expect_exact: "for(var i=1;i<=4;++i)if(!(i<=2))console.log(i);"
+}