From bed7b17134e0dd1d55b0414e9bc9329d807d56c7 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Mon, 15 Jun 2026 14:21:53 +0200 Subject: [PATCH] Made add in codegen faster --- Cargo.lock | 7 +++++++ crates/codegen/Cargo.toml | 1 + crates/codegen/src/lib.rs | 18 ++++++++++-------- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 86252ec..d67b7cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,6 +45,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bytecount" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" + [[package]] name = "bytes" version = "1.11.1" @@ -493,6 +499,7 @@ dependencies = [ name = "mist-codegen" version = "0.3.3-alpha.0" dependencies = [ + "bytecount", "mist-parser", ] diff --git a/crates/codegen/Cargo.toml b/crates/codegen/Cargo.toml index f4a00bc..2f946b0 100644 --- a/crates/codegen/Cargo.toml +++ b/crates/codegen/Cargo.toml @@ -9,4 +9,5 @@ keywords = ["compiler", "language", "mist"] categories = ["compilers"] [dependencies] +bytecount = "0.6.9" mist-parser = { workspace = true } diff --git a/crates/codegen/src/lib.rs b/crates/codegen/src/lib.rs index 0c8929e..d900a5b 100644 --- a/crates/codegen/src/lib.rs +++ b/crates/codegen/src/lib.rs @@ -50,15 +50,17 @@ impl RustCodegen { } fn add(&mut self, s: &str) { - for b in s.bytes() { - if b == b'\n' { - self.position.0 += 1; - self.position.1 = 0; - } else { - self.position.1 += 1; - } + let newline_count = bytecount::count(s.as_bytes(), b'\n'); + + if newline_count == 0 { + self.position.1 += s.len(); + } else { + self.position.0 += newline_count; + + let last_newline = s.rfind('\n').unwrap(); + self.position.1 = s.len() - last_newline - 1; } - + self.output.push_str(s); }