diff options
author | alexlamsl <alexlamsl@gmail.com> | 2017-02-18 19:19:12 +0800 |
---|---|---|
committer | alexlamsl <alexlamsl@gmail.com> | 2017-02-21 13:29:58 +0800 |
commit | b8b133d91a7a65f3375d391a036623901d1e357f (patch) | |
tree | 83259d7f56894355d98f02f2c9ac3d6ad971751f /lib | |
parent | c525a2b1907fdef36acffdeea4cf02ae476d8399 (diff) | |
download | tracifyjs-b8b133d91a7a65f3375d391a036623901d1e357f.tar.gz tracifyjs-b8b133d91a7a65f3375d391a036623901d1e357f.zip |
improve keep_fargs & keep_fnames
- utilise in_use_ids instead of unreferenced()
- drop_unused now up-to-date for subsequent passes
closes #1476
Diffstat (limited to 'lib')
-rw-r--r-- | lib/compress.js | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/lib/compress.js b/lib/compress.js index 1f710f10..345a414a 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1420,7 +1420,7 @@ merge(Compressor.prototype, { drop_funcs = drop_vars = true; } var in_use = []; - var in_use_ids = {}; // avoid expensive linear scans of in_use + var in_use_ids = Object.create(null); // avoid expensive linear scans of in_use if (self instanceof AST_Toplevel && compressor.top_retain) { self.variables.each(function(def) { if (compressor.top_retain(def) && !(def.id in in_use_ids)) { @@ -1514,11 +1514,17 @@ merge(Compressor.prototype, { // pass 3: we should drop declarations not in_use var tt = new TreeTransformer( function before(node, descend, in_list) { + if (node instanceof AST_Function + && node.name + && !compressor.option("keep_fnames") + && !(node.name.definition().id in in_use_ids)) { + node.name = null; + } if (node instanceof AST_Lambda && !(node instanceof AST_Accessor)) { if (!compressor.option("keep_fargs")) { for (var a = node.argnames, i = a.length; --i >= 0;) { var sym = a[i]; - if (sym.unreferenced()) { + if (!(sym.definition().id in in_use_ids)) { a.pop(); compressor.warn("Dropping unused function argument {name} [{file}:{line},{col}]", { name : sym.name, @@ -2145,16 +2151,6 @@ merge(Compressor.prototype, { return self; }); - OPT(AST_Function, function(self, compressor){ - self = AST_Lambda.prototype.optimize.call(self, compressor); - if (compressor.option("unused") && !compressor.option("keep_fnames")) { - if (self.name && self.name.unreferenced()) { - self.name = null; - } - } - return self; - }); - OPT(AST_Call, function(self, compressor){ if (compressor.option("unsafe")) { var exp = self.expression; |