From 6065aad10cff6d1f7aa6a48696dd0964986458fd Mon Sep 17 00:00:00 2001 From: alexlamsl Date: Tue, 17 Nov 2020 11:35:43 +0800 Subject: [PATCH] fix corner case in `reduce_vars` fixes #4280 --- lib/compress.js | 10 +++++++++- test/compress/destructured.js | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/lib/compress.js b/lib/compress.js index d9446e87..4406964b 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -619,7 +619,15 @@ merge(Compressor.prototype, { if (node.key instanceof AST_Node) node.key.walk(tw); fixed = function() { var key = node.key; - return make_node(typeof key == "string" ? AST_Dot : AST_Sub, node, { + var type = AST_Sub; + if (typeof key == "string") { + if (is_identifier_string(key)) { + type = AST_Dot; + } else { + key = make_node_from_constant(key, node); + } + } + return make_node(type, node, { expression: save(), property: key }); diff --git a/test/compress/destructured.js b/test/compress/destructured.js index 01b24563..169bfb7d 100644 --- a/test/compress/destructured.js +++ b/test/compress/destructured.js @@ -1295,3 +1295,25 @@ fn_name_unused: { expect_stdout: "PASS" node_version: ">=6" } + +issue_4280: { + options = { + evaluate: true, + reduce_vars: true, + toplevel: true, + unsafe: true, + unused: true, + } + input: { + var { + 1: a, + } = 2; + console.log(a); + } + expect: { + var {} = 2; + console.log(void 0); + } + expect_stdout: "undefined" + node_version: ">=6" +}