aboutsummaryrefslogtreecommitdiff
path: root/lib/compress.js
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-12-07 01:01:52 +0800
committerGitHub <noreply@github.com>2017-12-07 01:01:52 +0800
commit3dd495ecdd231a6b245ab002f61805b21114924b (patch)
treed0472d28f4bff91d1757a2eb366e66edf043ed77 /lib/compress.js
parentb9f3ddfb30897f634a7967e773d1555ceecb21cc (diff)
downloadtracifyjs-3dd495ecdd231a6b245ab002f61805b21114924b.tar.gz
tracifyjs-3dd495ecdd231a6b245ab002f61805b21114924b.zip
improve `if_return` (#2558)
`return void x()` => `x()`
Diffstat (limited to 'lib/compress.js')
-rw-r--r--lib/compress.js30
1 files changed, 23 insertions, 7 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 914fdd06..3f0414e2 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -1211,10 +1211,19 @@ merge(Compressor.prototype, {
var stat = statements[i];
var next = statements[i + 1];
- if (in_lambda && stat instanceof AST_Return && !stat.value && !next) {
- CHANGED = true;
- statements.length--;
- continue;
+ if (in_lambda && !next && stat instanceof AST_Return) {
+ if (!stat.value) {
+ CHANGED = true;
+ statements.length--;
+ continue;
+ }
+ if (stat.value instanceof AST_UnaryPrefix && stat.value.operator == "void") {
+ CHANGED = true;
+ statements[i] = make_node(AST_SimpleStatement, stat, {
+ body: stat.value.expression
+ });
+ continue;
+ }
}
if (stat instanceof AST_If) {
@@ -1301,9 +1310,16 @@ merge(Compressor.prototype, {
&& prev instanceof AST_If && prev.body instanceof AST_Return
&& i + 2 == statements.length && next instanceof AST_SimpleStatement) {
CHANGED = true;
- statements.push(make_node(AST_Return, next, {
- value: null
- }).transform(compressor));
+ stat = stat.clone();
+ stat.alternative = make_node(AST_BlockStatement, next, {
+ body: [
+ next,
+ make_node(AST_Return, next, {
+ value: null
+ })
+ ]
+ });
+ statements.splice(i, 2, stat.transform(compressor));
continue;
}
}