diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-03-08 18:37:32 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-08 18:37:32 +0800 |
commit | 711f88dcb49bc0daf0548f3ec240f680e05dfc27 (patch) | |
tree | e33629cc9e9ae6a4df611dfc03da41f8cf9742a2 | |
parent | 344d11d591ca18416ce6fe7444e451609ee14689 (diff) | |
download | tracifyjs-711f88dcb49bc0daf0548f3ec240f680e05dfc27.tar.gz tracifyjs-711f88dcb49bc0daf0548f3ec240f680e05dfc27.zip |
scan assignment value in drop_unused() (#1578)
those were not optimised for `unused` before, which made it necessary for `reduce_vars` to have separate steps for `keep_fnames`
docs update by @kzc
closes #1577
-rw-r--r-- | README.md | 8 | ||||
-rw-r--r-- | lib/compress.js | 5 | ||||
-rw-r--r-- | test/compress/drop-unused.js | 25 |
3 files changed, 30 insertions, 8 deletions
@@ -391,11 +391,11 @@ to set `true`; it's effectively a shortcut for `foo=true`). - `cascade` -- small optimization for sequences, transform `x, x` into `x` and `x = something(), x` into `x = something()` -- `collapse_vars` -- default `false`. Collapse single-use `var` and `const` - definitions when possible. +- `collapse_vars` -- Collapse single-use `var` and `const` definitions + when possible. -- `reduce_vars` -- default `false`. Improve optimization on variables assigned - with and used as constant values. +- `reduce_vars` -- Improve optimization on variables assigned with and + used as constant values. - `warnings` -- display warnings when dropping unreachable code or unused declarations etc. diff --git a/lib/compress.js b/lib/compress.js index f423fdd4..302f8f56 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1840,6 +1840,7 @@ merge(Compressor.prototype, { } if (drop_vars && node instanceof AST_Definitions && !(tt.parent() instanceof AST_ForIn)) { var def = node.definitions.filter(function(def){ + if (def.value) def.value = def.value.transform(tt); if (def.name.definition().id in in_use_ids) return true; var w = { name : def.name.name, @@ -2611,10 +2612,6 @@ merge(Compressor.prototype, { if (compressor.option("unused") && def.references.length == 1 && compressor.find_parent(AST_Scope) === def.scope) { - if (!compressor.option("keep_fnames") - && exp.name && exp.name.definition() === def) { - exp.name = null; - } self.expression = exp; } } diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js index 20dab3b9..9c960561 100644 --- a/test/compress/drop-unused.js +++ b/test/compress/drop-unused.js @@ -700,3 +700,28 @@ issue_1539: { } } } + +vardef_value: { + options = { + keep_fnames: false, + reduce_vars: true, + unused: true, + } + input: { + function f() { + function g(){ + return x(); + } + var a = g(); + return a(42); + } + } + expect: { + function f() { + var a = function(){ + return x(); + }(); + return a(42); + } + } +} |