This commit is contained in:
Aleksey Kladov 2018-01-28 14:30:59 +03:00
parent 3cd2b2473b
commit 60725def49
2 changed files with 5 additions and 28 deletions

View file

@ -57,7 +57,7 @@ impl<'p> Parser<'p> {
err.complete(self, ERROR); err.complete(self, ERROR);
} }
pub(crate) fn expect(&mut self, kind: SyntaxKind) -> bool { fn expect(&mut self, kind: SyntaxKind) -> bool {
if self.at(kind) { if self.at(kind) {
self.bump(); self.bump();
true true
@ -77,40 +77,24 @@ impl<'p> Parser<'p> {
trait Lookahead: Copy { trait Lookahead: Copy {
fn is_ahead(self, p: &Parser) -> bool; fn is_ahead(self, p: &Parser) -> bool;
fn consume(p: &mut Parser);
} }
impl Lookahead for SyntaxKind { impl Lookahead for SyntaxKind {
fn is_ahead(self, p: &Parser) -> bool { fn is_ahead(self, p: &Parser) -> bool {
p.current() == self p.current() == self
} }
fn consume(p: &mut Parser) {
p.bump();
}
} }
impl Lookahead for [SyntaxKind; 2] { impl Lookahead for [SyntaxKind; 2] {
fn is_ahead(self, p: &Parser) -> bool { fn is_ahead(self, p: &Parser) -> bool {
p.current() == self[0] && p.raw_lookahead(1) == self[1] p.current() == self[0] && p.raw_lookahead(1) == self[1]
} }
fn consume(p: &mut Parser) {
p.bump();
p.bump();
}
} }
impl Lookahead for [SyntaxKind; 3] { impl Lookahead for [SyntaxKind; 3] {
fn is_ahead(self, p: &Parser) -> bool { fn is_ahead(self, p: &Parser) -> bool {
p.current() == self[0] && p.raw_lookahead(1) == self[1] && p.raw_lookahead(2) == self[2] p.current() == self[0] && p.raw_lookahead(1) == self[1] && p.raw_lookahead(2) == self[2]
} }
fn consume(p: &mut Parser) {
p.bump();
p.bump();
p.bump();
}
} }
#[derive(Clone, Copy)] #[derive(Clone, Copy)]
@ -121,8 +105,4 @@ impl<'a> Lookahead for AnyOf<'a> {
let curr = p.current(); let curr = p.current();
self.0.iter().any(|&k| k == curr) self.0.iter().any(|&k| k == curr)
} }
fn consume(p: &mut Parser) {
p.bump();
}
} }

View file

@ -136,13 +136,6 @@ impl<'t> Parser<'t> {
self.events self.events
} }
pub(crate) fn current(&self) -> SyntaxKind {
if self.pos == self.tokens.len() {
return EOF;
}
self.tokens[self.pos].kind
}
pub(crate) fn start(&mut self) -> Marker { pub(crate) fn start(&mut self) -> Marker {
let m = Marker { let m = Marker {
pos: self.events.len() as u32, pos: self.events.len() as u32,
@ -175,6 +168,10 @@ impl<'t> Parser<'t> {
self.tokens.get(self.pos + n).map(|t| t.kind).unwrap_or(EOF) self.tokens.get(self.pos + n).map(|t| t.kind).unwrap_or(EOF)
} }
pub(crate) fn current(&self) -> SyntaxKind {
self.raw_lookahead(0)
}
fn event(&mut self, event: Event) { fn event(&mut self, event: Event) {
self.events.push(event) self.events.push(event)
} }