mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-20 11:36:10 +00:00
LibJS: Fix parsing of numeric object keys
Numeric keys were interpreted as their source text, leading to something like {0x10:true} to end up as {"0x10":true} instead of {16:true}
This commit is contained in:
parent
fdacfefd09
commit
be9c2feff0
Notes:
sideshowbarker
2024-07-19 00:32:19 +09:00
Author: https://github.com/sunverwerth Commit: https://github.com/SerenityOS/serenity/commit/be9c2feff05 Pull-request: https://github.com/SerenityOS/serenity/pull/3803 Reviewed-by: https://github.com/linusg
2 changed files with 9 additions and 4 deletions
|
@ -743,11 +743,9 @@ NonnullRefPtr<Expression> Parser::parse_property_key()
|
|||
if (match(TokenType::StringLiteral)) {
|
||||
return parse_string_literal(consume());
|
||||
} else if (match(TokenType::NumericLiteral)) {
|
||||
// FIXME: "evaluate" key to double value, see https://github.com/SerenityOS/serenity/issues/3717
|
||||
return create_ast_node<StringLiteral>(consume_and_validate_numeric_literal().value());
|
||||
return create_ast_node<NumericLiteral>(consume().double_value());
|
||||
} else if (match(TokenType::BigIntLiteral)) {
|
||||
auto value = consume(TokenType::BigIntLiteral).value();
|
||||
return create_ast_node<StringLiteral>(value.substring_view(0, value.length() - 1));
|
||||
return create_ast_node<BigIntLiteral>(consume().value());
|
||||
} else if (match(TokenType::BracketOpen)) {
|
||||
consume(TokenType::BracketOpen);
|
||||
auto result = parse_expression(0);
|
||||
|
|
|
@ -39,6 +39,13 @@ describe("correct behavior", () => {
|
|||
expect(object[symbol]).toBe(2);
|
||||
});
|
||||
|
||||
test("numeric keys", () => {
|
||||
expect({0x10:true}).toBe({16:true});
|
||||
expect({0b10:true}).toBe({2:true});
|
||||
expect({0o10:true}).toBe({8:true});
|
||||
expect({.5:true}).toBe({"0.5":true});
|
||||
});
|
||||
|
||||
test("computed properties", () => {
|
||||
const foo = "bar";
|
||||
const computed = "computed";
|
||||
|
|
Loading…
Add table
Reference in a new issue