1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:57:45 +00:00

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
4 changed files with 5 additions and 1 deletions

View file

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

View file

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

View file

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

View file

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