aboutsummaryrefslogtreecommitdiff
path: root/lib/compress.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compress.js')
-rw-r--r--lib/compress.js17
1 files changed, 11 insertions, 6 deletions
diff --git a/lib/compress.js b/lib/compress.js
index ae66d140..97b6149b 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -363,6 +363,10 @@ merge(Compressor.prototype, {
return orig.length == 1 && orig[0] instanceof AST_SymbolFunarg;
}
+ function is_funarg(def) {
+ return def.orig[0] instanceof AST_SymbolFunarg || def.orig[1] instanceof AST_SymbolFunarg;
+ }
+
function cross_scope(def, sym) {
do {
if (def === sym) return false;
@@ -371,9 +375,9 @@ merge(Compressor.prototype, {
}
function can_drop_symbol(ref, keep_lambda) {
- var orig = ref.definition().orig;
- if (ref.in_arg && (orig[0] instanceof AST_SymbolFunarg || orig[1] instanceof AST_SymbolFunarg)) return false;
- return all(orig, function(sym) {
+ var def = ref.definition();
+ if (ref.in_arg && is_funarg(def)) return false;
+ return all(def.orig, function(sym) {
return !(sym instanceof AST_SymbolConst || sym instanceof AST_SymbolLet
|| keep_lambda && sym instanceof AST_SymbolLambda);
});
@@ -541,7 +545,8 @@ merge(Compressor.prototype, {
return compressor.option("unused")
&& !def.scope.pinned()
&& def.single_use !== false
- && def.references.length - def.recursive_refs == 1;
+ && def.references.length - def.recursive_refs == 1
+ && !(is_funarg(def) && def.scope.uses_arguments);
}
function is_immutable(value) {
@@ -9331,7 +9336,7 @@ merge(Compressor.prototype, {
single_use = false;
} else if (fixed.name && fixed.name.definition() !== def) {
single_use = false;
- } else if (fixed.parent_scope !== self.scope.resolve() || def.orig[0] instanceof AST_SymbolFunarg) {
+ } else if (fixed.parent_scope !== self.scope.resolve() || is_funarg(def)) {
single_use = fixed.is_constant_expression(self.scope);
if (single_use == "f") {
var scope = self.scope;
@@ -9414,7 +9419,7 @@ merge(Compressor.prototype, {
if (fixed && (local || def.should_replace !== false)) {
var init;
if (fixed instanceof AST_This) {
- if (!(def.orig[0] instanceof AST_SymbolFunarg) && same_scope(def)) {
+ if (!is_funarg(def) && same_scope(def)) {
init = fixed;
}
} else {