Compile less of Token::peek for each token
diff --git a/src/token.rs b/src/token.rs
index 2bfbd0f..d897508 100644
--- a/src/token.rs
+++ b/src/token.rs
@@ -140,17 +140,23 @@
pub trait Sealed {}
}
+#[cfg(feature = "parsing")]
+fn peek_impl(cursor: Cursor, peek: fn(ParseStream) -> bool) -> bool {
+ let scope = Span::call_site();
+ let unexpected = Rc::new(Cell::new(None));
+ let buffer = ::private::new_parse_buffer(scope, cursor, unexpected);
+ peek(&buffer)
+}
+
macro_rules! impl_token {
($name:ident $display:expr) => {
#[cfg(feature = "parsing")]
impl Token for $name {
fn peek(cursor: Cursor) -> bool {
- // TODO factor out in a way that can be compiled just once
- let scope = Span::call_site();
- let unexpected = Rc::new(Cell::new(None));
- ::private::new_parse_buffer(scope, cursor, unexpected)
- .parse::<Self>()
- .is_ok()
+ fn peek(input: ParseStream) -> bool {
+ <$name as Parse>::parse(input).is_ok()
+ }
+ peek_impl(cursor, peek)
}
fn display() -> &'static str {