File tree Expand file tree Collapse file tree 2 files changed +21
-0
lines changed
Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser Expand file tree Collapse file tree 2 files changed +21
-0
lines changed Original file line number Diff line number Diff line change @@ -463,6 +463,18 @@ TextParseErrorOr<Tree> TextParser::parse_assignment()
463
463
return make_ref_counted<BinaryOperation>(op, lvalue, rvalue);
464
464
}
465
465
466
+ // perform <expr>
467
+ TextParseErrorOr<Tree> TextParser::parse_perform ()
468
+ {
469
+ auto rollback = rollback_point ();
470
+
471
+ TRY (consume_word (" perform" sv));
472
+ auto value = TRY (parse_expression ());
473
+
474
+ rollback.disarm ();
475
+ return value;
476
+ }
477
+
466
478
// <simple_step>
467
479
TextParseErrorOr<Tree> TextParser::parse_simple_step_or_inline_if_branch ()
468
480
{
@@ -493,6 +505,14 @@ TextParseErrorOr<Tree> TextParser::parse_simple_step_or_inline_if_branch()
493
505
return result.release_value ();
494
506
}
495
507
508
+ // Perform <expr>.$
509
+ if (auto result = parse_perform (); !result.is_error ()) {
510
+ TRY (consume_token_with_type (TokenType::Dot));
511
+ TRY (expect_eof ());
512
+ rollback.disarm ();
513
+ return result.release_value ();
514
+ }
515
+
496
516
return TextParseError {};
497
517
}
498
518
Original file line number Diff line number Diff line change @@ -84,6 +84,7 @@ class TextParser {
84
84
TextParseErrorOr<Tree> parse_return_statement ();
85
85
TextParseErrorOr<Tree> parse_assert ();
86
86
TextParseErrorOr<Tree> parse_assignment ();
87
+ TextParseErrorOr<Tree> parse_perform ();
87
88
TextParseErrorOr<Tree> parse_simple_step_or_inline_if_branch ();
88
89
TextParseErrorOr<IfConditionParseResult> parse_if_beginning ();
89
90
TextParseErrorOr<Tree> parse_inline_if_else ();
You can’t perform that action at this time.
0 commit comments