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;
case "charAt":
if (self.args.length < 2) {
var node = make_node(AST_Sub, self, {
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
})
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);

View File

@@ -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: {