LibJS: Support numeric literal expressions in nullish object exceptions

This commit is contained in:
Timothy Flynn 2024-04-01 22:02:03 -04:00 committed by Andreas Kling
parent 2d603c7c3f
commit bfcfe6ce35
Notes: sideshowbarker 2024-07-16 23:34:49 +09:00
3 changed files with 16 additions and 2 deletions

View file

@ -91,6 +91,7 @@ public:
virtual bool is_import_call() const { return false; }
virtual bool is_array_expression() const { return false; }
virtual bool is_object_expression() const { return false; }
virtual bool is_numeric_literal() const { return false; }
virtual bool is_string_literal() const { return false; }
virtual bool is_update_expression() const { return false; }
virtual bool is_call_expression() const { return false; }
@ -1182,6 +1183,8 @@ public:
virtual Value value() const override { return m_value; }
private:
virtual bool is_numeric_literal() const override { return true; }
Value m_value;
};

View file

@ -453,6 +453,11 @@ static Optional<ByteString> expression_identifier(Expression const& expression)
return identifier.string();
}
if (expression.is_numeric_literal()) {
auto const& literal = static_cast<NumericLiteral const&>(expression);
return literal.value().to_string_without_side_effects().to_byte_string();
}
if (expression.is_member_expression()) {
auto const& member_expression = static_cast<MemberExpression const&>(expression);
StringBuilder builder;

View file

@ -47,11 +47,17 @@ test("null/undefined array index", () => {
expect(() => {
foo[0].bar;
}).toThrowWithMessage(TypeError, `Cannot access property "bar" on ${value} object`);
}).toThrowWithMessage(
TypeError,
`Cannot access property "bar" on ${value} object "foo[0]"`
);
expect(() => {
foo[0].bar = 1;
}).toThrowWithMessage(TypeError, `Cannot access property "bar" on ${value} object`);
}).toThrowWithMessage(
TypeError,
`Cannot access property "bar" on ${value} object "foo[0]"`
);
expect(() => {
foo[index].bar;