From f4ee0f651c952eb85753633a990a598267981bcb Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Mon, 8 Mar 2021 20:40:21 +0000 Subject: [PATCH] fix corner case in `unsafe` (#4755) --- lib/compress.js | 22 +++++++++++----------- test/compress/evaluate.js | 11 ++++++++--- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index f63c1869..a92ad97d 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -8581,17 +8581,17 @@ merge(Compressor.prototype, { break; case "charAt": if (self.args.length < 2) { - var node = make_node(AST_Sub, self, { - expression: exp.expression, - property: self.args.length ? make_node(AST_Binary, self.args[0], { - operator: "|", - left: make_node(AST_Number, self, { - value: 0 - }), - right: self.args[0] - }) : make_node(AST_Number, self, { - value: 0 - }) + var node = make_node(AST_Binary, self, { + operator: "||", + left: make_node(AST_Sub, self, { + expression: exp.expression, + property: self.args.length ? make_node(AST_Binary, self.args[0], { + operator: "|", + left: make_node(AST_Number, self, { value: 0 }), + right: self.args[0], + }) : make_node(AST_Number, self, { value: 0 }), + }).optimize(compressor), + right: make_node(AST_String, self, { value: "" }), }); node.is_string = return_true; return node.optimize(compressor); diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js index 597c7c87..c92e82bd 100644 --- a/test/compress/evaluate.js +++ b/test/compress/evaluate.js @@ -847,6 +847,8 @@ unsafe_charAt_noop: { unsafe: true, } input: { + s = "foo"; + x = 42; console.log( s.charAt(0), "string".charAt(x), @@ -854,12 +856,15 @@ unsafe_charAt_noop: { ); } expect: { + s = "foo"; + x = 42; console.log( - s[0], - "string"[0 | x], - (typeof x)[0] + s[0] || "", + "string"[0 | x] || "", + (typeof x)[0] || "" ); } + expect_stdout: "f n" } issue_1649: { -- 2.34.1