diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-07-27 14:47:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-27 21:47:01 +0800 |
commit | 4fe2cac35ecd8fc5a69b1122cf536ee148340b3d (patch) | |
tree | 8fa8c61c03dea044412bb3ed9ec3bc2e717786de | |
parent | e219a9a78a0d2251e4dcbd4bb9034207eb484fe8 (diff) | |
download | tracifyjs-4fe2cac35ecd8fc5a69b1122cf536ee148340b3d.tar.gz tracifyjs-4fe2cac35ecd8fc5a69b1122cf536ee148340b3d.zip |
enhance `inline` (#5105)
-rw-r--r-- | lib/compress.js | 32 | ||||
-rw-r--r-- | test/compress/awaits.js | 6 | ||||
-rw-r--r-- | test/compress/drop-unused.js | 6 | ||||
-rw-r--r-- | test/compress/functions.js | 39 |
4 files changed, 62 insertions, 21 deletions
diff --git a/lib/compress.js b/lib/compress.js index 2c785251..d5fa5663 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -7300,12 +7300,11 @@ merge(Compressor.prototype, { if (node instanceof AST_Destructured) { if (value === null) { value = make_node(AST_Number, node, { value: 0 }); - } else if (value) { - if (value.tail_node().write_only === true || value.may_throw_on_access(compressor, true)) { - value = make_node(AST_Array, node, { - elements: value instanceof AST_Sequence ? value.expressions : [ value ], - }); - } + } else if (value && (value.tail_node().write_only === true + || value.may_throw_on_access(compressor, true))) { + value = make_node(AST_Array, node, { + elements: value instanceof AST_Sequence ? value.expressions : [ value ], + }); } return make_node(AST_DestructuredObject, node, { properties: [] }); } @@ -7935,9 +7934,10 @@ merge(Compressor.prototype, { exprs = trim(exprs, compressor, first_in_statement, array_spread); return exprs && make_sequence(self, exprs.map(convert_spread)); } - if (!fn.contains_this()) return make_node(AST_Call, self, self); + if (!fn.contains_this()) self = make_node(AST_Call, self, self); } } + self.call_only = true; return self; }); function drop_class(self, compressor, first_in_statement) { @@ -9711,13 +9711,19 @@ merge(Compressor.prototype, { return safe; } + function noop_value() { + return self.call_only ? make_node(AST_Number, self, { value: 0 }) : make_node(AST_Undefined, self); + } + function return_value(stat) { - if (!stat) return make_node(AST_Undefined, self); - if (stat instanceof AST_Return) return stat.value || make_node(AST_Undefined, self); - if (stat instanceof AST_SimpleStatement) return make_node(AST_UnaryPrefix, stat, { - operator: "void", - expression: stat.body - }); + if (!stat) return noop_value(); + if (stat instanceof AST_Return) return stat.value || noop_value(); + if (stat instanceof AST_SimpleStatement) { + return self.call_only ? stat.body : make_node(AST_UnaryPrefix, stat, { + operator: "void", + expression: stat.body, + }); + } } function can_flatten_body(stat) { diff --git a/test/compress/awaits.js b/test/compress/awaits.js index dc278f7e..0a7ae648 100644 --- a/test/compress/awaits.js +++ b/test/compress/awaits.js @@ -227,7 +227,7 @@ inline_await_1_trim: { console.log("PASS"); } expect: { - void 0; + 0; console.log("PASS"); } expect_stdout: "PASS" @@ -571,7 +571,7 @@ drop_async_1: { } expect: { console.log(function(a) { - void (a *= 7); + a *= 7; return a; }(6)); } @@ -1774,7 +1774,7 @@ issue_5001: { } expect: { var a = 0; - void a++; + a++; console.log(a ? "PASS" : "FAIL"); } expect_stdout: "PASS" diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js index 3d2a4f44..dc934c9b 100644 --- a/test/compress/drop-unused.js +++ b/test/compress/drop-unused.js @@ -1557,9 +1557,9 @@ issue_2665: { } expect: { var a = 1; - !function g() { + (function g() { a-- && g(); - }(); + })(); console.log(a); } expect_stdout: "-1" @@ -3379,7 +3379,7 @@ issue_4834: { } expect: { try { - void b.p; + b.p; } catch (e) { console.log("PASS"); } diff --git a/test/compress/functions.js b/test/compress/functions.js index ccfb3044..05d175c1 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -1171,11 +1171,11 @@ issue_2620_4: { } expect: { var c = "FAIL"; - !function() { + (function() { switch (NaN) { case void (c = "PASS"): } - }(); + })(); console.log(c); } expect_stdout: "PASS" @@ -6565,3 +6565,38 @@ issue_5098: { } expect_stdout: "PASS" } + +shorter_without_void: { + options = { + inline: true, + passes: 2, + reduce_vars: true, + side_effects: true, + toplevel: true, + } + input: { + var a; + function f(b) { + a = b; + } + f("foo"); + console.log(a) || f("bar"); + console.log(a, f("baz")); + console.log(a); + } + expect: { + var a; + function f(b) { + a = b; + } + a = "foo"; + console.log(a) || (a = "bar"); + console.log(a, f("baz")); + console.log(a); + } + expect_stdout: [ + "foo", + "bar undefined", + "baz", + ] +} |