Add some ParseBuffer utilities
diff --git a/src/parse.rs b/src/parse.rs
index efd7726..1ad1e9b 100644
--- a/src/parse.rs
+++ b/src/parse.rs
@@ -11,6 +11,7 @@
use buffer::Cursor;
use error;
+use synom::PResult;
pub use error::{Error, Result};
pub use lookahead::{Lookahead1, Peek};
@@ -102,6 +103,14 @@
T::parse(self)
}
+ pub fn peek<T: Peek>(&self, token: T) -> bool {
+ self.lookahead1().peek(token)
+ }
+
+ pub fn fork(&self) -> Self {
+ self.clone()
+ }
+
// Not public API.
#[doc(hidden)]
pub fn step_cursor<F, R>(&self, function: F) -> Result<R>
@@ -124,6 +133,12 @@
// Not public API.
#[doc(hidden)]
+ pub fn parse_synom<T>(&self, parse: fn(Cursor) -> PResult<T>) -> Result<T> {
+ self.step_cursor(|step| parse(step.cursor))
+ }
+
+ // Not public API.
+ #[doc(hidden)]
pub fn get_unexpected(&self) -> Rc<Cell<Option<Span>>> {
self.unexpected.clone()
}