1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 08:35:09 +00:00

AK: Remove ByteString from GenericLexer

A bunch of users used consume_specific with a constant ByteString
literal, which can be replaced by an allocation-free StringView literal.

The generic consume_while overload gains a requires clause so that
consume_specific("abc") causes a more understandable and actionable
error.
This commit is contained in:
kleines Filmröllchen 2023-10-10 12:42:20 +02:00 committed by Andrew Kaster
parent 7c88ab2836
commit eada4f2ee8
16 changed files with 89 additions and 86 deletions

View file

@ -56,7 +56,7 @@ parse_state_machine(StringView input)
bool consumed = true;
while (consumed) {
consumed = lexer.consume_while(isspace).length() > 0;
if (lexer.consume_specific("//")) {
if (lexer.consume_specific("//"sv)) {
lexer.consume_line();
consumed = true;
}
@ -78,7 +78,7 @@ parse_state_machine(StringView input)
auto consume_number = [&] {
int num = 0;
consume_whitespace();
if (lexer.consume_specific("0x")) {
if (lexer.consume_specific("0x"sv)) {
auto hex_digits = lexer.consume_while([](char c) {
if (isdigit(c)) return true;
else {
@ -107,7 +107,7 @@ parse_state_machine(StringView input)
consume_whitespace();
condition.begin = consume_number();
consume_whitespace();
lexer.consume_specific("..");
lexer.consume_specific(".."sv);
consume_whitespace();
condition.end = consume_number();
consume_whitespace();
@ -123,16 +123,16 @@ parse_state_machine(StringView input)
auto consume_action = [&]() {
StateTransition action;
consume_whitespace();
lexer.consume_specific("=>");
lexer.consume_specific("=>"sv);
consume_whitespace();
lexer.consume_specific('(');
consume_whitespace();
if (!lexer.consume_specific("_"))
if (!lexer.consume_specific("_"sv))
action.new_state = consume_identifier();
consume_whitespace();
lexer.consume_specific(',');
consume_whitespace();
if (!lexer.consume_specific("_"))
if (!lexer.consume_specific("_"sv))
action.action = consume_identifier();
consume_whitespace();
lexer.consume_specific(')');
@ -152,10 +152,10 @@ parse_state_machine(StringView input)
if (lexer.consume_specific('}')) {
break;
}
if (lexer.consume_specific("@entry")) {
if (lexer.consume_specific("@entry"sv)) {
consume_whitespace();
state.entry_action = consume_identifier();
} else if (lexer.consume_specific("@exit")) {
} else if (lexer.consume_specific("@exit"sv)) {
consume_whitespace();
state.exit_action = consume_identifier();
} else if (lexer.next_is('@')) {
@ -176,13 +176,13 @@ parse_state_machine(StringView input)
consume_whitespace();
if (lexer.is_eof())
break;
if (lexer.consume_specific("@namespace")) {
if (lexer.consume_specific("@namespace"sv)) {
consume_whitespace();
state_machine->namespaces = lexer.consume_while([](char c) { return isalpha(c) || c == ':'; });
} else if (lexer.consume_specific("@begin")) {
} else if (lexer.consume_specific("@begin"sv)) {
consume_whitespace();
state_machine->initial_state = consume_identifier();
} else if (lexer.consume_specific("@name")) {
} else if (lexer.consume_specific("@name"sv)) {
consume_whitespace();
state_machine->name = consume_identifier();
} else if (lexer.next_is("@anywhere")) {