From 336b1add4f252d06ca3261ec6d5eca580c5f0a42 Mon Sep 17 00:00:00 2001 From: kzc Date: Thu, 5 Oct 2017 12:57:00 -0400 Subject: [PATCH] fix `unsafe` join() on array literal with spread (#2347) fixes #2345 --- lib/compress.js | 6 ++++-- test/compress/harmony.js | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index ec083fbe..9304e5d4 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3437,7 +3437,9 @@ merge(Compressor.prototype, { } var elements = []; var consts = []; - exp.expression.elements.forEach(function(el) { + for (var i = 0, len = exp.expression.elements.length; i < len; i++) { + var el = exp.expression.elements[i]; + if (el instanceof AST_Expansion) break EXIT; var value = el.evaluate(compressor); if (value !== el) { consts.push(value); @@ -3450,7 +3452,7 @@ merge(Compressor.prototype, { } elements.push(el); } - }); + } if (consts.length > 0) { elements.push(make_node(AST_String, self, { value: consts.join(separator) diff --git a/test/compress/harmony.js b/test/compress/harmony.js index e48a623b..fb57ae8f 100644 --- a/test/compress/harmony.js +++ b/test/compress/harmony.js @@ -839,3 +839,27 @@ class_name_can_be_preserved_with_reserved: { } } } + +issue_2345: { + options = { + evaluate: true, + side_effects: true, + unsafe: true, + unused: true, + } + input: { + console.log([...[3, 2, 1]].join("-")); + var a = [3, 2, 1]; + console.log([...a].join("-")); + } + expect: { + console.log([...[3, 2, 1]].join("-")); + var a = [3, 2, 1]; + console.log([...a].join("-")); + } + expect_stdout: [ + "3-2-1", + "3-2-1", + ] + node_version: ">=6" +}