From e8c04f8cb691ee132c7d3b0b10db0d7da8ce3bf6 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sun, 3 Jan 2021 02:34:46 +0000 Subject: [PATCH] suppress invalid AST transform in `--reduce-test` (#4498) --- test/input/reduce/destructured_assign.js | 3 +++ .../input/reduce/destructured_assign.reduced.js | 17 +++++++++++++++++ test/mocha/reduce.js | 12 ++++++++++++ test/reduce.js | 2 +- 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 test/input/reduce/destructured_assign.js create mode 100644 test/input/reduce/destructured_assign.reduced.js diff --git a/test/input/reduce/destructured_assign.js b/test/input/reduce/destructured_assign.js new file mode 100644 index 00000000..26e1580b --- /dev/null +++ b/test/input/reduce/destructured_assign.js @@ -0,0 +1,3 @@ +var o = {}; +[ o[1 + .1 + .1] ] = [ 42 ]; +console.log(o[1.2]); diff --git a/test/input/reduce/destructured_assign.reduced.js b/test/input/reduce/destructured_assign.reduced.js new file mode 100644 index 00000000..887810d4 --- /dev/null +++ b/test/input/reduce/destructured_assign.reduced.js @@ -0,0 +1,17 @@ +// (beautified) +var o = {}; + +[ o[1 + .1 + .1] ] = []; + +console.log(o); +// output: { '1.2000000000000002': undefined } +// +// minify: { '1.2': undefined } +// +// options: { +// "compress": { +// "unsafe_math": true +// }, +// "mangle": false, +// "validate": true +// } \ No newline at end of file diff --git a/test/mocha/reduce.js b/test/mocha/reduce.js index ce931fe9..e3653314 100644 --- a/test/mocha/reduce.js +++ b/test/mocha/reduce.js @@ -307,6 +307,18 @@ describe("test/reduce.js", function() { if (result.error) throw result.error; assert.strictEqual(result.code, read("test/input/reduce/diff_error.reduced.js")); }); + it("Should maintain valid LHS in destructuring assignments", function() { + if (semver.satisfies(process.version, "<6")) return; + var result = reduce_test(read("test/input/reduce/destructured_assign.js"), { + compress: { + unsafe_math: true, + }, + mangle: false, + validate: true, + }); + if (result.error) throw result.error; + assert.strictEqual(result.code, read("test/input/reduce/destructured_assign.reduced.js")); + }); it("Should handle destructured catch expressions", function() { if (semver.satisfies(process.version, "<6")) return; var result = reduce_test(read("test/input/reduce/destructured_catch.js"), { diff --git a/test/reduce.js b/test/reduce.js index e45cfa5d..54494c56 100644 --- a/test/reduce.js +++ b/test/reduce.js @@ -341,7 +341,7 @@ module.exports = function reduce_test(testcase, minify_options, reduce_options) else if (node instanceof U.AST_PropAccess) { var expr = [ node.expression, - node.property instanceof U.AST_Node && node.property, + node.property instanceof U.AST_Node && !(parent instanceof U.AST_Destructured) && node.property, ][ node.start._permute++ % 2 ]; if (expr) { CHANGED = true; -- 2.34.1