diff --git a/lib/compress.js b/lib/compress.js index 24446b251d..5aeb910e12 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 a940e708b5..b428e0e1f4 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" +}