aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js5
-rw-r--r--test/compress/arguments.js26
2 files changed, 28 insertions, 3 deletions
diff --git a/lib/compress.js b/lib/compress.js
index e05b6f28..2a8ba8a0 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -9572,13 +9572,14 @@ merge(Compressor.prototype, {
}
}
var parent = compressor.parent();
+ var assigned = is_lhs(compressor.self(), parent);
var def, fn, fn_parent;
if (compressor.option("arguments")
&& expr instanceof AST_SymbolRef
&& is_arguments(def = expr.definition())
&& prop instanceof AST_Number
&& (fn = expr.scope.resolve()) === find_lambda()
- && fn.uses_arguments !== "d") {
+ && !(assigned && fn.uses_arguments === "d")) {
var index = prop.value;
if (parent instanceof AST_UnaryPrefix && parent.operator == "delete") {
if (!def.deleted) def.deleted = [];
@@ -9616,7 +9617,7 @@ merge(Compressor.prototype, {
return sym;
}
}
- if (is_lhs(compressor.self(), parent)) return self;
+ if (assigned) return self;
if (compressor.option("sequences")
&& parent.TYPE != "Call"
&& !(parent instanceof AST_ForIn && parent.init === self)) {
diff --git a/test/compress/arguments.js b/test/compress/arguments.js
index 37307ed5..4b09a99a 100644
--- a/test/compress/arguments.js
+++ b/test/compress/arguments.js
@@ -808,7 +808,7 @@ issue_4200: {
expect_stdout: "undefined"
}
-issue_4291: {
+issue_4291_1: {
options = {
arguments: true,
keep_fargs: "strict",
@@ -827,3 +827,27 @@ issue_4291: {
}
expect_stdout: "PASS"
}
+
+issue_4291_2: {
+ options = {
+ arguments: true,
+ keep_fargs: "strict",
+ }
+ input: {
+ var a = function() {
+ if (arguments[0])
+ arguments[1] = "PASS";
+ return arguments;
+ }(42);
+ console.log(a[1], a[0], a.length);
+ }
+ expect: {
+ var a = function(argument_0) {
+ if (argument_0)
+ arguments[1] = "PASS";
+ return arguments;
+ }(42);
+ console.log(a[1], a[0], a.length);
+ }
+ expect_stdout: "PASS 42 1"
+}