From dfb86ccdd1dfe6f07953afc8c308b00c9c6856b1 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 1 Jan 2021 23:53:15 +0000 Subject: [PATCH] fix corner case in `conditionals` (#4492) --- lib/compress.js | 13 ++++++++++--- test/compress/spread.js | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 0a560dda..5f8f3736 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -9843,10 +9843,17 @@ merge(Compressor.prototype, { && !condition.has_side_effects(compressor) && !consequent.expression.has_side_effects(compressor)) { var node = consequent.clone(); - node.args[arg_index] = make_node(AST_Conditional, self, { + var arg = consequent.args[arg_index]; + node.args[arg_index] = arg instanceof AST_Spread ? make_node(AST_Spread, self, { + expression: make_node(AST_Conditional, self, { + condition: condition, + consequent: arg.expression, + alternative: alternative.args[arg_index].expression, + }), + }) : make_node(AST_Conditional, self, { condition: condition, - consequent: consequent.args[arg_index], - alternative: alternative.args[arg_index] + consequent: arg, + alternative: alternative.args[arg_index], }); return node; } diff --git a/test/compress/spread.js b/test/compress/spread.js index 67aa549a..944915fe 100644 --- a/test/compress/spread.js +++ b/test/compress/spread.js @@ -85,6 +85,28 @@ collapse_vars_4: { node_version: ">=6" } +conditionals_farg: { + options = { + conditionals: true, + } + input: { + function log(msg) { + console.log(msg); + } + var a = 42, b = [ "PASS" ], c = [ "FAIL" ]; + a ? log(...b) : log(...c); + } + expect: { + function log(msg) { + console.log(msg); + } + var a = 42, b = [ "PASS" ], c = [ "FAIL" ]; + log(...a ? b : c); + } + expect_stdout: "PASS" + node_version: ">=6" +} + dont_inline: { options = { inline: true, -- 2.34.1