fix corner case in unsafe (#4755)
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
Reference in New Issue
Block a user