From: Alex Lam S.L Date: Sun, 20 Dec 2020 03:22:45 +0000 (+0000) Subject: handle destructuring `catch` in `--reduce-test` (#4427) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=caea6aac81555040071c21e9e35888f78aeb5a82;p=UglifyJS.git handle destructuring `catch` in `--reduce-test` (#4427) --- diff --git a/test/input/reduce/destructured_catch.js b/test/input/reduce/destructured_catch.js new file mode 100644 index 00000000..3b248455 --- /dev/null +++ b/test/input/reduce/destructured_catch.js @@ -0,0 +1,7 @@ +try { + "foo" in 42; +} catch ({ + message, +}) { + console.log(message); +} diff --git a/test/input/reduce/destructured_catch.reduced.js b/test/input/reduce/destructured_catch.reduced.js new file mode 100644 index 00000000..c7a6736d --- /dev/null +++ b/test/input/reduce/destructured_catch.reduced.js @@ -0,0 +1,15 @@ +// (beautified) +try { + 1 in 0; +} catch ({ + message: message +}) { + console.log(message); +} +// output: Cannot use 'in' operator to search for '1' in 0 +// +// minify: Cannot use 'in' operator to search for '0' in 0 +// +// options: { +// "mangle": false +// } \ No newline at end of file diff --git a/test/mocha/reduce.js b/test/mocha/reduce.js index 7e2d4601..c06efd67 100644 --- a/test/mocha/reduce.js +++ b/test/mocha/reduce.js @@ -313,4 +313,12 @@ 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 handle destructured catch expressions", function() { + if (semver.satisfies(process.version, "<6")) return; + var result = reduce_test(read("test/input/reduce/destructured_catch.js"), { + mangle: false, + }); + if (result.error) throw result.error; + assert.strictEqual(result.code, read("test/input/reduce/destructured_catch.reduced.js")); + }); }); diff --git a/test/reduce.js b/test/reduce.js index 1ab18411..bcb30fe8 100644 --- a/test/reduce.js +++ b/test/reduce.js @@ -465,7 +465,7 @@ module.exports = function reduce_test(testcase, minify_options, reduce_options) if (node.TYPE == "Call" && node.expression.print_to_string() == "console.log") { return to_sequence(node.args); } - if (node instanceof U.AST_Catch && node.argname) { + if (node instanceof U.AST_Catch && node.argname instanceof U.AST_SymbolCatch) { descend(node, this); node.body.unshift(new U.AST_SimpleStatement({ body: wrap_with_console_log(new U.AST_SymbolRef(node.argname)), diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js index 8fce55de..74fbd4bd 100644 --- a/test/ufuzz/index.js +++ b/test/ufuzz/index.js @@ -1714,7 +1714,7 @@ function patch_try_catch(orig, toplevel) { offset: 0, tries: [], } ]; - var re = /(?:(?:^|[\s{}):;])try|}\s*catch\s*\(([^)]+)\)|}\s*finally)\s*(?={)/g; + var re = /(?:(?:^|[\s{}):;])try|}\s*catch\s*\(([^)[{]+)\)|}\s*finally)\s*(?={)/g; while (stack.length) { var code = stack[0].code; var offset = stack[0].offset;