JSSpecCompiler: Parse "NewTarget" in xspec mode

This commit is contained in:
Dan Klishch 2024-01-21 15:27:23 -05:00 committed by Andrew Kaster
parent 4d8f74c149
commit ba61b61d67
Notes: sideshowbarker 2024-07-17 18:46:57 +09:00
4 changed files with 5 additions and 1 deletions

View file

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

View file

@ -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,

View file

@ -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;
}

View file

@ -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 },