aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-07-27 14:47:01 +0100
committerGitHub <noreply@github.com>2021-07-27 21:47:01 +0800
commit4fe2cac35ecd8fc5a69b1122cf536ee148340b3d (patch)
tree8fa8c61c03dea044412bb3ed9ec3bc2e717786de
parente219a9a78a0d2251e4dcbd4bb9034207eb484fe8 (diff)
downloadtracifyjs-4fe2cac35ecd8fc5a69b1122cf536ee148340b3d.tar.gz
tracifyjs-4fe2cac35ecd8fc5a69b1122cf536ee148340b3d.zip
enhance `inline` (#5105)
-rw-r--r--lib/compress.js32
-rw-r--r--test/compress/awaits.js6
-rw-r--r--test/compress/drop-unused.js6
-rw-r--r--test/compress/functions.js39
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",
+ ]
+}