fix corner case in unsafe (#4755)

This commit is contained in:
Alex Lam S.L
2021-03-08 20:40:21 +00:00
committed by GitHub
parent 077512d151
commit f4ee0f651c
2 changed files with 19 additions and 14 deletions

View File

@@ -8581,17 +8581,17 @@ merge(Compressor.prototype, {
break; break;
case "charAt": case "charAt":
if (self.args.length < 2) { if (self.args.length < 2) {
var node = make_node(AST_Sub, self, { var node = make_node(AST_Binary, self, {
expression: exp.expression, operator: "||",
property: self.args.length ? make_node(AST_Binary, self.args[0], { left: make_node(AST_Sub, self, {
operator: "|", expression: exp.expression,
left: make_node(AST_Number, self, { property: self.args.length ? make_node(AST_Binary, self.args[0], {
value: 0 operator: "|",
}), left: make_node(AST_Number, self, { value: 0 }),
right: self.args[0] right: self.args[0],
}) : make_node(AST_Number, self, { }) : make_node(AST_Number, self, { value: 0 }),
value: 0 }).optimize(compressor),
}) right: make_node(AST_String, self, { value: "" }),
}); });
node.is_string = return_true; node.is_string = return_true;
return node.optimize(compressor); return node.optimize(compressor);

View File

@@ -847,6 +847,8 @@ unsafe_charAt_noop: {
unsafe: true, unsafe: true,
} }
input: { input: {
s = "foo";
x = 42;
console.log( console.log(
s.charAt(0), s.charAt(0),
"string".charAt(x), "string".charAt(x),
@@ -854,12 +856,15 @@ unsafe_charAt_noop: {
); );
} }
expect: { expect: {
s = "foo";
x = 42;
console.log( console.log(
s[0], s[0] || "",
"string"[0 | x], "string"[0 | x] || "",
(typeof x)[0] (typeof x)[0] || ""
); );
} }
expect_stdout: "f n"
} }
issue_1649: { issue_1649: {