aboutsummaryrefslogtreecommitdiff
path: root/lib/compress.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compress.js')
-rw-r--r--lib/compress.js34
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) {