avoid reducing setter argument (#3737)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sun, 1 Mar 2020 05:04:21 +0000 (05:04 +0000)
committerGitHub <noreply@github.com>
Sun, 1 Mar 2020 05:04:21 +0000 (05:04 +0000)
test/input/reduce/setter.js [new file with mode: 0644]
test/input/reduce/setter.reduced.js [new file with mode: 0644]
test/mocha/reduce.js
test/reduce.js

diff --git a/test/input/reduce/setter.js b/test/input/reduce/setter.js
new file mode 100644 (file)
index 0000000..87228bc
--- /dev/null
@@ -0,0 +1,8 @@
+console.log(function f(a) {
+    ({
+        set p(v) {
+            f++;
+        }
+    });
+    return f.length;
+}());
diff --git a/test/input/reduce/setter.reduced.js b/test/input/reduce/setter.reduced.js
new file mode 100644 (file)
index 0000000..d947226
--- /dev/null
@@ -0,0 +1,19 @@
+console.log(function f(a) {
+    ({
+        set p(v) {
+            f++;
+        }
+    });
+    return f.length;
+}());
+// output: 1
+// 
+// minify: 0
+// 
+// options: {
+//   "compress": {
+//     "keep_fargs": false,
+//     "unsafe": true
+//   },
+//   "mangle": false
+// }
\ No newline at end of file
index 7eacbd7..a8ab67b 100644 (file)
@@ -31,6 +31,19 @@ describe("test/reduce.js", function() {
         if (result.error) throw result.error;
         assert.strictEqual(result.code, read("test/input/reduce/label.reduced.js"));
     });
+    it("Should retain setter arguments", function() {
+        var result = reduce_test(read("test/input/reduce/setter.js"), {
+            compress: {
+                keep_fargs: false,
+                unsafe: true,
+            },
+            mangle: false,
+        }, {
+            verbose: false,
+        });
+        if (result.error) throw result.error;
+        assert.strictEqual(result.code, read("test/input/reduce/setter.reduced.js"));
+    });
     it("Should handle test cases with --toplevel", function() {
         var result = reduce_test([
             "var Infinity = 42;",
index eb6fb5c..f9e0825 100644 (file)
@@ -75,8 +75,8 @@ module.exports = function reduce_test(testcase, minify_options, reduce_options)
             if (node instanceof U.AST_LabelRef) return;
             if (!in_list && node instanceof U.AST_SymbolDeclaration) return;
             if (node instanceof U.AST_Toplevel) return;
-
             var parent = tt.parent();
+            if (node instanceof U.AST_SymbolFunarg && parent instanceof U.AST_Accessor) return;
 
             // ensure that the _permute prop is a number.
             // can not use `node.start._permute |= 0;` as it will erase fractional part.