1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:48:11 +00:00

LibJS: Allow parsing numeric and string literals in object expressions

Also updated the object-basic.js test to include this change
This commit is contained in:
DexesTTP 2020-04-06 22:17:05 +02:00 committed by Andreas Kling
parent 154dcd1ed6
commit e586dc285a
2 changed files with 32 additions and 5 deletions

View file

@ -389,13 +389,30 @@ NonnullRefPtr<ObjectExpression> Parser::parse_object_expression()
consume(TokenType::CurlyOpen);
while (!match(TokenType::CurlyClose)) {
auto identifier = create_ast_node<Identifier>(consume(TokenType::Identifier).value());
FlyString property_name;
if (match(TokenType::Identifier)) {
property_name = consume(TokenType::Identifier).value();
} else if (match(TokenType::StringLiteral)) {
property_name = consume(TokenType::StringLiteral).string_value();
} else if (match(TokenType::NumericLiteral)) {
property_name = consume(TokenType::NumericLiteral).value();
} else {
m_parser_state.m_has_errors = true;
auto& current_token = m_parser_state.m_current_token;
fprintf(stderr, "Error: Unexpected token %s as member in object initialization. Expected a numeric literal, string literal or identifier (line: %zu, column: %zu))\n",
current_token.name(),
current_token.line_number(),
current_token.line_column());
consume();
continue;
}
if (match(TokenType::Colon)) {
consume(TokenType::Colon);
properties.set(identifier->string(), parse_expression(0));
properties.set(property_name, parse_expression(0));
} else {
properties.set(identifier->string(), identifier);
properties.set(property_name, create_ast_node<Identifier>(property_name));
}
if (!match(TokenType::Comma))