diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2019-04-25 15:15:50 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-25 15:15:50 +0800 |
commit | e5436ca5665378d67bb228704736d1fe5fa7b6ee (patch) | |
tree | 6443f5770a5b67676a26e94ad913f705d6578680 | |
parent | cfde686eab4ddaf0fc38b638462c3613b18c6ad4 (diff) | |
download | tracifyjs-e5436ca5665378d67bb228704736d1fe5fa7b6ee.tar.gz tracifyjs-e5436ca5665378d67bb228704736d1fe5fa7b6ee.zip |
enhance `side_effects` (#3384)
-rw-r--r-- | lib/compress.js | 12 | ||||
-rw-r--r-- | test/compress/conditionals.js | 36 | ||||
-rw-r--r-- | test/compress/sequences.js | 36 |
3 files changed, 77 insertions, 7 deletions
diff --git a/lib/compress.js b/lib/compress.js index 13fc953d..a7585a60 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4172,10 +4172,8 @@ merge(Compressor.prototype, { var right = this.right.drop_side_effect_free(compressor, first_in_statement); if (!right) return this.left.drop_side_effect_free(compressor, first_in_statement); if (lazy_op[this.operator]) { - var node; - if (right === this.right) { - node = this; - } else { + var node = this; + if (right !== node.right) { node = this.clone(); node.right = right.drop_side_effect_free(compressor); } @@ -4559,14 +4557,14 @@ merge(Compressor.prototype, { operator : "||", left : negated, right : self.body.body - }) + }).transform(compressor) }).optimize(compressor); return make_node(AST_SimpleStatement, self, { body: make_node(AST_Binary, self, { operator : "&&", left : self.condition, right : self.body.body - }) + }).transform(compressor) }).optimize(compressor); } if (self.body instanceof AST_EmptyStatement @@ -4576,7 +4574,7 @@ merge(Compressor.prototype, { operator : "||", left : self.condition, right : self.alternative.body - }) + }).transform(compressor) }).optimize(compressor); } if (self.body instanceof AST_Exit diff --git a/test/compress/conditionals.js b/test/compress/conditionals.js index a208165f..594d956d 100644 --- a/test/compress/conditionals.js +++ b/test/compress/conditionals.js @@ -1435,3 +1435,39 @@ iife_condition: { } expect_stdout: "PASS" } + +angularjs_chain: { + options = { + conditionals: true, + passes: 2, + side_effects: true, + } + input: { + function nonComputedMember(left, right, context, create) { + var lhs = left(); + if (create && create !== 1) { + if (lhs && lhs[right] == null) { + lhs[right] = {}; + } + } + var value = lhs != null ? lhs[right] : undefined; + if (context) { + return { context: lhs, name: right, value: value }; + } else { + return value; + } + } + } + expect: { + function nonComputedMember(left, right, context, create) { + var lhs = left(); + create && 1 !== create && lhs && null == lhs[right] && (lhs[right] = {}); + var value = null != lhs ? lhs[right] : void 0; + return context ? { + context: lhs, + name: right, + value: value + } : value; + } + } +} diff --git a/test/compress/sequences.js b/test/compress/sequences.js index 29cede40..47dd4c4f 100644 --- a/test/compress/sequences.js +++ b/test/compress/sequences.js @@ -964,3 +964,39 @@ missing_link: { console.log(a); } } + +angularjs_chain: { + options = { + conditionals: true, + sequences: true, + side_effects: true, + } + input: { + function nonComputedMember(left, right, context, create) { + var lhs = left(); + if (create && create !== 1) { + if (lhs && lhs[right] == null) { + lhs[right] = {}; + } + } + var value = lhs != null ? lhs[right] : undefined; + if (context) { + return { context: lhs, name: right, value: value }; + } else { + return value; + } + } + } + expect: { + function nonComputedMember(left, right, context, create) { + var lhs = left(); + create && 1 !== create && lhs && null == lhs[right] && (lhs[right] = {}); + var value = null != lhs ? lhs[right] : void 0; + return context ? { + context: lhs, + name: right, + value: value + } : value; + } + } +} |