From 9159f0ecd4554d740ed4eb48351022117db6f0c9 Mon Sep 17 00:00:00 2001 From: kzc Date: Wed, 2 Aug 2017 00:32:45 -0400 Subject: [PATCH] fix `unsafe` for object literals with rest elements --- lib/compress.js | 1 + test/compress/harmony.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lib/compress.js b/lib/compress.js index db26dfd7..275503c0 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1731,6 +1731,7 @@ merge(Compressor.prototype, { var val = {}; for (var i = 0, len = this.properties.length; i < len; i++) { var prop = this.properties[i]; + if (prop instanceof AST_Expansion) return this; var key = prop.key; if (key instanceof AST_Symbol) { key = key.name; diff --git a/test/compress/harmony.js b/test/compress/harmony.js index 25814798..2f095383 100644 --- a/test/compress/harmony.js +++ b/test/compress/harmony.js @@ -729,3 +729,31 @@ object_rest_spread: { const w = { a: 1, b: 2 }; console.log({ ...w, w: 0, ...{}, ...n, ...{ K: 9 } }); } } + +object_spread_unsafe: { + options = { + collapse_vars: true, + evaluate: true, + join_vars: true, + passes: 3, + reduce_vars: true, + side_effects: true, + toplevel: true, + unsafe: true, + unused: true, + } + mangle = { + toplevel: true, + } + input: { + var o1 = { x: 1, y: 2 }; + var o2 = { x: 3, z: 4 }; + var cloned = { ...o1 }; + var merged = { ...o1, ...o2 }; + console.log(cloned, merged); + } + expect: { + var o = { x: 1, y: 2 }, l = { ...o }, x = { ...o, ...{ x: 3, z: 4 } }; + console.log(l, x); + } +}