diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-12-07 01:01:52 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-07 01:01:52 +0800 |
commit | 3dd495ecdd231a6b245ab002f61805b21114924b (patch) | |
tree | d0472d28f4bff91d1757a2eb366e66edf043ed77 /lib/compress.js | |
parent | b9f3ddfb30897f634a7967e773d1555ceecb21cc (diff) | |
download | tracifyjs-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.js | 30 |
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; } } |