diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-04-01 00:05:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-01 07:05:50 +0800 |
commit | 1947a21824f3cbbb7a3c8267a15fa9c80b91fc59 (patch) | |
tree | a0444c947b3aa53ee0791d2ad728264498a8016b | |
parent | 6335b5fd8a6bb874e1c15e83abcaf86a1304fa1a (diff) | |
download | tracifyjs-1947a21824f3cbbb7a3c8267a15fa9c80b91fc59.tar.gz tracifyjs-1947a21824f3cbbb7a3c8267a15fa9c80b91fc59.zip |
fix corner case in `properties` (#4830)
fixes #4829
-rw-r--r-- | lib/compress.js | 16 | ||||
-rw-r--r-- | test/compress/classes.js | 24 |
2 files changed, 32 insertions, 8 deletions
diff --git a/lib/compress.js b/lib/compress.js index 24446b25..5aeb910e 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -11457,15 +11457,15 @@ merge(Compressor.prototype, { if (prop.key != key) continue; if (!all(props, can_hoist_property)) break; if (!safe_to_flatten(prop.value, compressor)) break; + props = props.map(function(prop) { + return prop.value; + }); + if (prop instanceof AST_ObjectMethod && prop.value instanceof AST_Function) { + props[i] = make_node(AST_Arrow, prop.value, prop.value); + } return make_node(AST_Sub, this, { - expression: make_node(AST_Array, expr, { - elements: props.map(function(prop) { - return prop.value; - }) - }), - property: make_node(AST_Number, this, { - value: i - }) + expression: make_node(AST_Array, expr, { elements: props }), + property: make_node(AST_Number, this, { value: i }), }); } } diff --git a/test/compress/classes.js b/test/compress/classes.js index a940e708..b428e0e1 100644 --- a/test/compress/classes.js +++ b/test/compress/classes.js @@ -1344,3 +1344,27 @@ issue_4821_2: { expect_stdout: "function" node_version: ">=12" } + +issue_4829: { + options = { + properties: true, + } + input: { + "use strict"; + try { + class A extends { f(){} }.f {} + } catch (e) { + console.log("PASS"); + } + } + expect: { + "use strict"; + try { + class A extends [ () => {} ][0] {} + } catch (e) { + console.log("PASS"); + } + } + expect_stdout: "PASS" + node_version: ">=4" +} |