فهرست منبع

JSSpecCompiler: Parse "NewTarget" in xspec mode

Dan Klishch 1 سال پیش
والد
کامیت
ba61b61d67

+ 1 - 0
Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/AST/AST.h

@@ -135,6 +135,7 @@ class WellKnownNode : public Expression {
 public:
     enum Type {
         False,
+        NewTarget,
         Null,
         This,
         True,

+ 1 - 0
Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/AST/ASTPrinting.cpp

@@ -39,6 +39,7 @@ void WellKnownNode::dump_tree(StringBuilder& builder)
 {
     static constexpr StringView type_to_name[] = {
         "False"sv,
+        "NewTarget"sv,
         "Null"sv,
         "This"sv,
         "True"sv,

+ 2 - 1
Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/Lexer.cpp

@@ -76,6 +76,7 @@ void tokenize_string(SpecificationParsingContext& ctx, XML::Node const* node, St
         { "?"sv, TokenType::QuestionMark },
         { "]"sv, TokenType::SquareBracketClose },
         { "["sv, TokenType::SquareBracketOpen },
+        { "NewTarget"sv, TokenType::WellKnownValue },
     };
 
     LineTrackingLexer lexer(view, node->offset);
@@ -95,7 +96,7 @@ void tokenize_string(SpecificationParsingContext& ctx, XML::Node const* node, St
         bool matched = false;
         for (auto const& [text_to_match, token_type] : choices) {
             if (lexer.consume_specific(text_to_match)) {
-                tokens.append({ token_type, ""sv, move(token_location) });
+                tokens.append({ token_type, text_to_match, move(token_location) });
                 matched = true;
                 break;
             }

+ 1 - 0
Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler/Parser/TextParser.cpp

@@ -220,6 +220,7 @@ TextParseErrorOr<Tree> TextParser::parse_value()
             WellKnownNode::Type type;
         } translations[] = {
             { "false"sv, WellKnownNode::Type::False },
+            { "NewTarget"sv, WellKnownNode::Type::NewTarget },
             { "null"sv, WellKnownNode::Type::Null },
             { "this"sv, WellKnownNode::Type::This },
             { "true"sv, WellKnownNode::Type::True },