From 0a9cdb6c73275639fb6a137494b03bd2309ba4bd Mon Sep 17 00:00:00 2001 From: alexlamsl Date: Sun, 29 Oct 2017 17:42:25 +0800 Subject: [PATCH] handle computed `properties` correctly --- lib/compress.js | 7 ++++++- test/compress/properties.js | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/compress.js b/lib/compress.js index e477a2d6..4b5ea1a9 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4907,7 +4907,12 @@ merge(Compressor.prototype, { expression: make_node(AST_Array, expr, { elements: props.map(function(prop) { var v = prop.value; - return v instanceof AST_Accessor ? make_node(AST_Function, v, v) : v; + if (v instanceof AST_Accessor) v = make_node(AST_Function, v, v); + var k = prop.key; + if (k instanceof AST_Node && !(k instanceof AST_SymbolMethod)) { + return make_sequence(prop, [ k, v ]); + } + return v; }) }), property: make_node(AST_Number, this, { diff --git a/test/compress/properties.js b/test/compress/properties.js index f9b2e294..b69ee692 100644 --- a/test/compress/properties.js +++ b/test/compress/properties.js @@ -1258,3 +1258,27 @@ array_hole: { } expect_stdout: "2 undefined 3" } + +computed_property: { + options = { + properties: true, + side_effects: true, + } + input: { + console.log({ + a: "bar", + [console.log("foo")]: 42, + }.a); + } + expect: { + console.log([ + "bar", + console.log("foo") + ][0]); + } + expect_stdout: [ + "foo", + "bar" + ] + node_version: ">=4" +}