implement eat_until leveraging memchr in lexer

This commit is contained in:
gvozdvmozgu 2025-02-05 07:03:53 -08:00
parent 8df89d1cb0
commit 9f469eb600
4 changed files with 11 additions and 2 deletions

View file

@ -14,6 +14,7 @@ Rust lexer used by rustc. No stability guarantees are provided.
# Note that this crate purposefully does not depend on other rustc crates
[dependencies]
memchr = "2.7.4"
unicode-xid = "0.2.0"
[dependencies.unicode-properties]

View file

@ -103,4 +103,11 @@ impl<'a> Cursor<'a> {
self.bump();
}
}
pub(crate) fn eat_until(&mut self, byte: u8) {
self.chars = match memchr::memchr(byte, self.as_str().as_bytes()) {
Some(index) => self.as_str()[index..].chars(),
None => "".chars(),
}
}
}

View file

@ -483,7 +483,7 @@ impl Cursor<'_> {
_ => None,
};
self.eat_while(|c| c != '\n');
self.eat_until(b'\n');
LineComment { doc_style }
}
@ -888,7 +888,7 @@ impl Cursor<'_> {
// Skip the string contents and on each '#' character met, check if this is
// a raw string termination.
loop {
self.eat_while(|c| c != '"');
self.eat_until(b'"');
if self.is_eof() {
return Err(RawStrError::NoTerminator {