diff --git a/Libraries/LibJS/Parser.cpp b/Libraries/LibJS/Parser.cpp index ca7b8abe9af..d7896d9c323 100644 --- a/Libraries/LibJS/Parser.cpp +++ b/Libraries/LibJS/Parser.cpp @@ -743,11 +743,9 @@ NonnullRefPtr 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(consume_and_validate_numeric_literal().value()); + return create_ast_node(consume().double_value()); } else if (match(TokenType::BigIntLiteral)) { - auto value = consume(TokenType::BigIntLiteral).value(); - return create_ast_node(value.substring_view(0, value.length() - 1)); + return create_ast_node(consume().value()); } else if (match(TokenType::BracketOpen)) { consume(TokenType::BracketOpen); auto result = parse_expression(0); diff --git a/Libraries/LibJS/Tests/object-basic.js b/Libraries/LibJS/Tests/object-basic.js index 37f5c6e4dd8..2681ebc173d 100644 --- a/Libraries/LibJS/Tests/object-basic.js +++ b/Libraries/LibJS/Tests/object-basic.js @@ -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";