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);
if (auto identifer = expression_identifier(member_expression.property()); identifer.has_value()) {
if (!builder.is_empty())
builder.append('.');
builder.append(*identifer);
if (member_expression.is_computed())
builder.appendff("[{}]", *identifer);
else
builder.appendff(".{}", *identifer);
}
return builder.to_byte_string();

View file

@ -43,6 +43,7 @@ test("null/undefined object key", () => {
test("null/undefined array index", () => {
[null, undefined].forEach(value => {
let foo = [value];
let index = 0;
expect(() => {
foo[0].bar;
@ -51,5 +52,19 @@ test("null/undefined array index", () => {
expect(() => {
foo[0].bar = 1;
}).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]"`
);
});
});