1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 06:17:34 +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

@ -231,7 +231,7 @@ Vector<Endpoint> parse(ByteBuffer const& file_contents)
consume_whitespace();
parse_includes();
consume_whitespace();
lexer.consume_specific("endpoint");
lexer.consume_specific("endpoint"sv);
consume_whitespace();
endpoints.last().name = lexer.consume_while([](char ch) { return !isspace(ch); });
endpoints.last().magic = Traits<ByteString>::hash(endpoints.last().name);

View file

@ -166,7 +166,7 @@ EasingFunctionMetadata easing_function_metadata(EasingFunction easing_function)
auto parameter_type_name = lexer.consume_until([](char ch) { return ch == ' ' || ch == '>'; });
auto has_bounds = false;
auto is_optional = false;
if (lexer.consume_specific(" [")) {
if (lexer.consume_specific(" ["sv)) {
has_bounds = true;
auto contents = lexer.consume_until(']');
VERIFY(contents == "0, 1"sv);

View file

@ -28,7 +28,7 @@ static void consume_whitespace(GenericLexer& lexer)
while (consumed) {
consumed = lexer.consume_while(is_ascii_space).length() > 0;
if (lexer.consume_specific("//")) {
if (lexer.consume_specific("//"sv)) {
lexer.consume_until('\n');
lexer.ignore();
consumed = true;

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")) {