diff options
| author | gvozdvmozgu <gvozdvmozgu@gmail.com> | 2025-02-05 07:03:53 -0800 |
|---|---|---|
| committer | gvozdvmozgu <gvozdvmozgu@gmail.com> | 2025-02-05 07:03:53 -0800 |
| commit | 9f469eb600e88e52fe04c1da55fd4ee67ff920ff (patch) | |
| tree | ba6b92d8cc11b7b18e186a8cd18768e3f4f7139f | |
| parent | 8df89d1cb077cd76013d3f9f5a4e92c5b5a9280c (diff) | |
| download | rust-9f469eb600e88e52fe04c1da55fd4ee67ff920ff.tar.gz rust-9f469eb600e88e52fe04c1da55fd4ee67ff920ff.zip | |
implement `eat_until` leveraging memchr in lexer
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | compiler/rustc_lexer/Cargo.toml | 1 | ||||
| -rw-r--r-- | compiler/rustc_lexer/src/cursor.rs | 7 | ||||
| -rw-r--r-- | compiler/rustc_lexer/src/lib.rs | 4 |
4 files changed, 11 insertions, 2 deletions
diff --git a/Cargo.lock b/Cargo.lock index 18d5b66eb73..734d3fcba42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4064,6 +4064,7 @@ name = "rustc_lexer" version = "0.0.0" dependencies = [ "expect-test", + "memchr", "unicode-properties", "unicode-xid", ] diff --git a/compiler/rustc_lexer/Cargo.toml b/compiler/rustc_lexer/Cargo.toml index 84b9e292295..4b3492fdeda 100644 --- a/compiler/rustc_lexer/Cargo.toml +++ b/compiler/rustc_lexer/Cargo.toml @@ -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] diff --git a/compiler/rustc_lexer/src/cursor.rs b/compiler/rustc_lexer/src/cursor.rs index d173c3ac032..e0e3bd0e30b 100644 --- a/compiler/rustc_lexer/src/cursor.rs +++ b/compiler/rustc_lexer/src/cursor.rs @@ -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(), + } + } } diff --git a/compiler/rustc_lexer/src/lib.rs b/compiler/rustc_lexer/src/lib.rs index aa4abf678b9..c63ab77deca 100644 --- a/compiler/rustc_lexer/src/lib.rs +++ b/compiler/rustc_lexer/src/lib.rs @@ -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 { |
