Move some sharable code out of Parser for F

This commit is contained in:
David Tolnay 2018-09-01 11:41:12 -07:00
parent 3b2a68016b
commit 7b07aa1a17
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82

View File

@ -433,6 +433,13 @@ pub trait Parser: Sized {
}
}
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 @@ where
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() {