Move some sharable code out of Parser for F
diff --git a/src/parse.rs b/src/parse.rs
index 42b4e04..f5ecb50 100644
--- a/src/parse.rs
+++ b/src/parse.rs
@@ -433,6 +433,13 @@
     }
 }
 
+fn tokens_to_parse_buffer(tokens: &TokenBuffer) -> ParseBuffer {
+    let scope = Span::call_site();
+    let cursor = tokens.begin();
+    let unexpected = Rc::new(Cell::new(None));
+    private::new_parse_buffer(scope, cursor, unexpected)
+}
+
 impl<F, T> Parser for F
 where
     F: FnOnce(ParseStream) -> Result<T>,
@@ -441,8 +448,7 @@
 
     fn parse2(self, tokens: TokenStream) -> Result<T> {
         let buf = TokenBuffer::new2(tokens);
-        let unexpected = Rc::new(Cell::new(None));
-        let state = private::new_parse_buffer(Span::call_site(), buf.begin(), unexpected);
+        let state = tokens_to_parse_buffer(&buf);
         let node = self(&state)?;
         state.check_unexpected()?;
         if state.is_empty() {