LibJS: Support computed member expressions in nullish object exceptions

This commit is contained in:
Timothy Flynn 2024-04-01 22:00:29 -04:00 committed by Andreas Kling
commit 2d603c7c3f
Notes: sideshowbarker 2024-07-16 23:51:07 +09:00
2 changed files with 19 additions and 3 deletions

View file

@ -461,9 +461,10 @@ static Optional<ByteString> expression_identifier(Expression const& expression)
builder.append(*identifer); builder.append(*identifer);
if (auto identifer = expression_identifier(member_expression.property()); identifer.has_value()) { if (auto identifer = expression_identifier(member_expression.property()); identifer.has_value()) {
if (!builder.is_empty()) if (member_expression.is_computed())
builder.append('.'); builder.appendff("[{}]", *identifer);
builder.append(*identifer); else
builder.appendff(".{}", *identifer);
} }
return builder.to_byte_string(); return builder.to_byte_string();

View file

@ -43,6 +43,7 @@ test("null/undefined object key", () => {
test("null/undefined array index", () => { test("null/undefined array index", () => {
[null, undefined].forEach(value => { [null, undefined].forEach(value => {
let foo = [value]; let foo = [value];
let index = 0;
expect(() => { expect(() => {
foo[0].bar; foo[0].bar;
@ -51,5 +52,19 @@ test("null/undefined array index", () => {
expect(() => { expect(() => {
foo[0].bar = 1; foo[0].bar = 1;
}).toThrowWithMessage(TypeError, `Cannot access property "bar" on ${value} object`); }).toThrowWithMessage(TypeError, `Cannot access property "bar" on ${value} object`);
expect(() => {
foo[index].bar;
}).toThrowWithMessage(
TypeError,
`Cannot access property "bar" on ${value} object "foo[index]"`
);
expect(() => {
foo[index].bar = 1;
}).toThrowWithMessage(
TypeError,
`Cannot access property "bar" on ${value} object "foo[index]"`
);
}); });
}); });