diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-02-25 18:22:49 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-26 02:22:49 +0800 |
commit | 992952d8f6101ebefecf6ca5291d31290da8862f (patch) | |
tree | 1cc47b37f3bb06506f0773b69424eac33b4d30e5 /lib | |
parent | 6d7ab63a6600c65958f4788dee6da5b2ea43476c (diff) | |
download | tracifyjs-992952d8f6101ebefecf6ca5291d31290da8862f.tar.gz tracifyjs-992952d8f6101ebefecf6ca5291d31290da8862f.zip |
fix corner cases with `exports` (#4691)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/compress.js | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/lib/compress.js b/lib/compress.js index 08b0987a..b2825ada 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1079,16 +1079,19 @@ merge(Compressor.prototype, { return true; }); def(AST_LambdaDefinition, function(tw, descend, compressor) { - var id = this.name.definition().id; - if (tw.defun_visited[id]) return true; - if (tw.defun_ids[id] !== tw.safe_ids) return true; - tw.defun_visited[id] = true; - this.inlined = false; + var fn = this; + var def = fn.name.definition(); + var parent = tw.parent(); + if (parent instanceof AST_ExportDeclaration || parent instanceof AST_ExportDefault) def.single_use = false; + if (tw.defun_visited[def.id]) return true; + if (tw.defun_ids[def.id] !== tw.safe_ids) return true; + tw.defun_visited[def.id] = true; + fn.inlined = false; push(tw); - reset_variables(tw, compressor, this); + reset_variables(tw, compressor, fn); descend(); pop(tw); - walk_defuns(tw, this); + walk_defuns(tw, fn); return true; }); def(AST_Switch, function(tw, descend, compressor) { @@ -5673,11 +5676,14 @@ merge(Compressor.prototype, { } } if (!(sym instanceof AST_SymbolRef)) return; - if (compressor.exposed(sym.definition())) return; + var def = sym.definition(); + if (export_defaults[def.id]) return; + if (compressor.exposed(def)) return; if (!can_drop_symbol(sym, nested)) return; return sym; }; var assign_in_use = Object.create(null); + var export_defaults = Object.create(null); var find_variable = function(name) { find_variable = compose(self, 0, noop); return find_variable(name); @@ -5748,7 +5754,11 @@ merge(Compressor.prototype, { in_use.push(def); } if (node.extends) node.extends.walk(tw); - var is_export = tw.parent() instanceof AST_ExportDefault; + var is_export = false; + if (tw.parent() instanceof AST_ExportDefault) { + is_export = true; + export_defaults[def.id] = true; + } node.properties.forEach(function(prop) { if (prop.key instanceof AST_Node) prop.key.walk(tw); if (!prop.value) return; @@ -5770,7 +5780,11 @@ merge(Compressor.prototype, { in_use.push(def); } initializations.add(def.id, node); - if (!(tw.parent() instanceof AST_ExportDefault)) return true; + if (tw.parent() instanceof AST_ExportDefault) { + export_defaults[def.id] = true; + } else { + return true; + } } if (node instanceof AST_Definitions) { node.definitions.forEach(function(defn) { |