diff --git a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/AST/AST.h b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/AST/AST.h index 817eb17432..fcc77f569d 100644 --- a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/AST/AST.h +++ b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/AST/AST.h @@ -242,7 +242,8 @@ protected: #define ENUMERATE_UNARY_OPERATORS(F) \ F(Invalid) \ F(AssertCompletion) \ - F(Minus) + F(Minus) \ + F(ReturnIfAbrubt) #define ENUMERATE_BINARY_OPERATORS(F) \ F(Invalid) \ diff --git a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/Lexer.cpp b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/Lexer.cpp index 0025705fee..b694488bad 100644 --- a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/Lexer.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/Lexer.cpp @@ -71,6 +71,7 @@ void tokenize_string(SpecificationParsingContext& ctx, XML::Node const* node, St { ")"sv, TokenType::ParenClose }, { "("sv, TokenType::ParenOpen }, { "+"sv, TokenType::Plus }, + { "?"sv, TokenType::QuestionMark }, }; LineTrackingLexer lexer(view, node->offset); diff --git a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/Token.h b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/Token.h index fb2aa2a34d..79bd62483c 100644 --- a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/Token.h +++ b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/Token.h @@ -44,6 +44,7 @@ constexpr i32 closing_bracket_precedence = 18; F(ParenClose, 18, Invalid, Invalid, ParenOpen, "')'") \ F(ParenOpen, -1, Invalid, Invalid, ParenClose, "'('") \ F(Plus, 6, Invalid, Plus, Invalid, "plus") \ + F(QuestionMark, 3, ReturnIfAbrubt, Invalid, Invalid, "question mark") \ F(SectionNumber, -1, Invalid, Invalid, Invalid, "section number") \ F(String, -1, Invalid, Invalid, Invalid, "string literal") \ F(Superscript, 4, Invalid, Power, Invalid, "subscript") \ diff --git a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Tests/spec-parsing.xml b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Tests/spec-parsing.xml index 2c8c1d7c0c..7fce954d55 100644 --- a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Tests/spec-parsing.xml +++ b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Tests/spec-parsing.xml @@ -33,4 +33,12 @@ + +

3 TestReturnIfAbrupt ( a )

+ +
    +
  1. Return ? WellKnownConstants(a).
  2. +
+
+
diff --git a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Tests/spec-parsing.xml.expectation b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Tests/spec-parsing.xml.expectation index f85856a9cd..3583354b24 100644 --- a/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Tests/spec-parsing.xml.expectation +++ b/Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Tests/spec-parsing.xml.expectation @@ -46,3 +46,11 @@ TreeList ReturnNode WellKnownNode False +TestReturnIfAbrupt(a): +TreeList + ReturnNode + UnaryOperation ReturnIfAbrubt + FunctionCall + Func "WellKnownConstants" + Var a +