mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 07:08:10 +00:00
AK: Add a consume_until(StringView) overload to GenericLexer
This allows us to skip a strlen call.
This commit is contained in:
parent
10b25d2a57
commit
d49d2c7ec4
3 changed files with 18 additions and 1 deletions
|
@ -84,6 +84,22 @@ StringView GenericLexer::consume_until(const char* stop)
|
||||||
return m_input.substring_view(start, length);
|
return m_input.substring_view(start, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Consume and return characters until the string `stop` is found
|
||||||
|
// The `stop` string is ignored, as it is user-defined
|
||||||
|
StringView GenericLexer::consume_until(StringView stop)
|
||||||
|
{
|
||||||
|
size_t start = m_index;
|
||||||
|
while (!is_eof() && !next_is(stop))
|
||||||
|
m_index++;
|
||||||
|
size_t length = m_index - start;
|
||||||
|
|
||||||
|
ignore(stop.length());
|
||||||
|
|
||||||
|
if (length == 0)
|
||||||
|
return {};
|
||||||
|
return m_input.substring_view(start, length);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Consume a string surrounded by single or double quotes. The returned
|
* Consume a string surrounded by single or double quotes. The returned
|
||||||
* StringView does not include the quotes. An escape character can be provided
|
* StringView does not include the quotes. An escape character can be provided
|
||||||
|
|
|
@ -113,6 +113,7 @@ public:
|
||||||
StringView consume_line();
|
StringView consume_line();
|
||||||
StringView consume_until(char);
|
StringView consume_until(char);
|
||||||
StringView consume_until(const char*);
|
StringView consume_until(const char*);
|
||||||
|
StringView consume_until(StringView);
|
||||||
StringView consume_quoted_string(char escape_char = 0);
|
StringView consume_quoted_string(char escape_char = 0);
|
||||||
String consume_and_unescape_string(char escape_char = '\\');
|
String consume_and_unescape_string(char escape_char = '\\');
|
||||||
|
|
||||||
|
|
|
@ -356,7 +356,7 @@ String Preprocessor::remove_escaped_newlines(StringView value)
|
||||||
AK::StringBuilder processed_value;
|
AK::StringBuilder processed_value;
|
||||||
GenericLexer lexer { value };
|
GenericLexer lexer { value };
|
||||||
while (!lexer.is_eof()) {
|
while (!lexer.is_eof()) {
|
||||||
processed_value.append(lexer.consume_until("\\\n"));
|
processed_value.append(lexer.consume_until("\\\n"sv));
|
||||||
}
|
}
|
||||||
return processed_value.to_string();
|
return processed_value.to_string();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue