Block comment perf
This is 95 times faster in debug mode for large block comments.
diff --git a/Cargo.toml b/Cargo.toml
index 6559459..5dbd6ce 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,4 +24,5 @@
[dev-dependencies]
syntex_pos = "0.44.0"
syntex_syntax = "0.44.0"
+time = "0.1.35"
walkdir = "0.1.8"
diff --git a/src/space.rs b/src/space.rs
index 59a2b0f..3726faa 100644
--- a/src/space.rs
+++ b/src/space.rs
@@ -49,19 +49,21 @@
}
let mut depth = 0;
- let mut chars = input.char_indices();
- while let Some((i, _)) = chars.next() {
- let s = &input[i..];
- if s.starts_with("/*") {
+ let bytes = input.as_bytes();
+ let mut i = 0;
+ let upper = bytes.len() - 1;
+ while i < upper {
+ if bytes[i] == b'/' && bytes[i + 1] == b'*' {
depth += 1;
- chars.next(); // eat '*'
- } else if s.starts_with("*/") {
+ i += 1; // eat '*'
+ } else if bytes[i] == b'*' && bytes[i + 1] == b'/' {
depth -= 1;
if depth == 0 {
return IResult::Done(&input[i + 2..], &input[..i + 2]);
}
- chars.next(); // eat '/'
+ i += 1; // eat '/'
}
+ i += 1;
}
IResult::Error
}
diff --git a/tests/test_round_trip.rs b/tests/test_round_trip.rs
index e197172..795df19 100644
--- a/tests/test_round_trip.rs
+++ b/tests/test_round_trip.rs
@@ -5,11 +5,14 @@
extern crate syn;
extern crate syntex_pos;
extern crate syntex_syntax;
+extern crate time;
extern crate walkdir;
use syntex_pos::Span;
use syntex_syntax::ast;
use syntex_syntax::parse::{self, ParseSess, PResult};
+use time::PreciseTime;
+
use std::fs::File;
use std::io::{self, Read, Write};
@@ -37,8 +40,9 @@
let mut content = String::new();
file.read_to_string(&mut content).unwrap();
- let krate = match syn::parse_crate(&content) {
- Ok(krate) => krate,
+ let start = PreciseTime::now();
+ let (krate, elapsed) = match syn::parse_crate(&content) {
+ Ok(krate) => (krate, start.to(PreciseTime::now())),
Err(msg) => {
errorf!("syn failed to parse\n{}\n", msg);
failed += 1;
@@ -60,7 +64,7 @@
};
if before == after {
- errorf!("pass\n");
+ errorf!("pass in {}ms\n", elapsed.num_milliseconds());
} else {
errorf!("FAIL\nbefore: {:?}\nafter: {:?}\n", before, after);
failed += 1;