diff --git a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/TextParser.cpp b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/TextParser.cpp index 6e637e000f..6f10f2f550 100644 --- a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/TextParser.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/TextParser.cpp @@ -463,6 +463,18 @@ TextParseErrorOr TextParser::parse_assignment() return make_ref_counted(op, lvalue, rvalue); } +// perform +TextParseErrorOr TextParser::parse_perform() +{ + auto rollback = rollback_point(); + + TRY(consume_word("perform"sv)); + auto value = TRY(parse_expression()); + + rollback.disarm(); + return value; +} + // TextParseErrorOr TextParser::parse_simple_step_or_inline_if_branch() { @@ -493,6 +505,14 @@ TextParseErrorOr TextParser::parse_simple_step_or_inline_if_branch() return result.release_value(); } + // Perform .$ + if (auto result = parse_perform(); !result.is_error()) { + TRY(consume_token_with_type(TokenType::Dot)); + TRY(expect_eof()); + rollback.disarm(); + return result.release_value(); + } + return TextParseError {}; } diff --git a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/TextParser.h b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/TextParser.h index 7142c1521b..5fb64df487 100644 --- a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/TextParser.h +++ b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/TextParser.h @@ -84,6 +84,7 @@ private: TextParseErrorOr parse_return_statement(); TextParseErrorOr parse_assert(); TextParseErrorOr parse_assignment(); + TextParseErrorOr parse_perform(); TextParseErrorOr parse_simple_step_or_inline_if_branch(); TextParseErrorOr parse_if_beginning(); TextParseErrorOr parse_inline_if_else();