From 1947a21824f3cbbb7a3c8267a15fa9c80b91fc59 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 1 Apr 2021 00:05:50 +0100 Subject: [PATCH] fix corner case in `properties` (#4830) fixes #4829 --- lib/compress.js | 16 ++++++++-------- test/compress/classes.js | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 8 deletions(-) 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" +}