@@ -1381,6 +1381,32 @@ expression* parser::parse_object_literal() {
1381
1381
this ->skip ();
1382
1382
return property_name;
1383
1383
};
1384
+ auto parse_equal = [&](token key_token, expression* key) {
1385
+ expression* lhs;
1386
+ bool missing_key;
1387
+ switch (key_token.type ) {
1388
+ case token_type::number:
1389
+ case token_type::string:
1390
+ lhs = this ->make_expression <expression::literal>(key_token.span ());
1391
+ missing_key = true ;
1392
+ break ;
1393
+ default :
1394
+ lhs = this ->make_expression <expression::variable>(
1395
+ key_token.identifier_name (), key_token.type );
1396
+ missing_key = false ;
1397
+ break ;
1398
+ }
1399
+ this ->skip ();
1400
+ expression* rhs = this ->parse_expression (precedence{.commas = false });
1401
+ expression* value = this ->make_expression <expression::assignment>(
1402
+ expression_kind::assignment, lhs, rhs);
1403
+ if (missing_key) {
1404
+ this ->error_reporter_ ->report (error_missing_key_for_object_entry{
1405
+ .expression = value->span (),
1406
+ });
1407
+ }
1408
+ entries.emplace_back (key, value);
1409
+ };
1384
1410
auto parse_method_entry = [&](const char8* key_span_begin, expression* key,
1385
1411
function_attributes attributes) -> void {
1386
1412
buffering_visitor* v = this ->expressions_ .make_buffering_visitor ();
@@ -1562,30 +1588,7 @@ expression* parser::parse_object_literal() {
1562
1588
break ;
1563
1589
1564
1590
case token_type::equal: {
1565
- expression* lhs;
1566
- bool missing_key;
1567
- switch (key_token.type ) {
1568
- case token_type::number:
1569
- case token_type::string:
1570
- lhs = this ->make_expression <expression::literal>(key_token.span ());
1571
- missing_key = true ;
1572
- break ;
1573
- default :
1574
- lhs = this ->make_expression <expression::variable>(
1575
- key_token.identifier_name (), key_token.type );
1576
- missing_key = false ;
1577
- break ;
1578
- }
1579
- this ->skip ();
1580
- expression* rhs = this ->parse_expression (precedence{.commas = false });
1581
- expression* value = this ->make_expression <expression::assignment>(
1582
- expression_kind::assignment, lhs, rhs);
1583
- if (missing_key) {
1584
- this ->error_reporter_ ->report (error_missing_key_for_object_entry{
1585
- .expression = value->span (),
1586
- });
1587
- }
1588
- entries.emplace_back (key, value);
1591
+ parse_equal (key_token, key);
1589
1592
break ;
1590
1593
}
1591
1594
@@ -1707,6 +1710,7 @@ expression* parser::parse_object_literal() {
1707
1710
bool is_async = this ->peek ().type == token_type::kw_async;
1708
1711
function_attributes method_attributes =
1709
1712
is_async ? function_attributes::async : function_attributes::normal;
1713
+ token keyword_token = this ->peek ();
1710
1714
source_code_span keyword_span = this ->peek ().span ();
1711
1715
token_type keyword_type = this ->peek ().type ;
1712
1716
this ->skip ();
@@ -1771,6 +1775,13 @@ expression* parser::parse_object_literal() {
1771
1775
break ;
1772
1776
}
1773
1777
1778
+ case token_type::equal: {
1779
+ expression* key =
1780
+ this ->make_expression <expression::literal>(keyword_span);
1781
+ parse_equal (keyword_token, key);
1782
+ break ;
1783
+ }
1784
+
1774
1785
// { get: value }
1775
1786
// { async: value }
1776
1787
case token_type::colon: {
0 commit comments