more orthogonal interface
This commit is contained in:
@@ -25,20 +25,23 @@ pub struct Tokens {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Tokens {
|
impl Tokens {
|
||||||
pub fn push(&mut self, was_joint: bool, kind: SyntaxKind) {
|
pub fn push(&mut self, kind: SyntaxKind) {
|
||||||
self.push_impl(was_joint, kind, SyntaxKind::EOF)
|
self.push_impl(kind, SyntaxKind::EOF)
|
||||||
|
}
|
||||||
|
pub fn was_joint(&mut self, yes: bool) {
|
||||||
|
let idx = self.len();
|
||||||
|
if yes && idx > 0 {
|
||||||
|
self.set_joint(idx - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pub fn push_ident(&mut self, contextual_kw: SyntaxKind) {
|
pub fn push_ident(&mut self, contextual_kw: SyntaxKind) {
|
||||||
self.push_impl(false, SyntaxKind::IDENT, contextual_kw)
|
self.push_impl(SyntaxKind::IDENT, contextual_kw)
|
||||||
}
|
}
|
||||||
fn push_impl(&mut self, was_joint: bool, kind: SyntaxKind, contextual_kw: SyntaxKind) {
|
fn push_impl(&mut self, kind: SyntaxKind, contextual_kw: SyntaxKind) {
|
||||||
let idx = self.len();
|
let idx = self.len();
|
||||||
if idx % (bits::BITS as usize) == 0 {
|
if idx % (bits::BITS as usize) == 0 {
|
||||||
self.joint.push(0);
|
self.joint.push(0);
|
||||||
}
|
}
|
||||||
if was_joint && idx > 0 {
|
|
||||||
self.set_joint(idx - 1);
|
|
||||||
}
|
|
||||||
self.kind.push(kind);
|
self.kind.push(kind);
|
||||||
self.contextual_kw.push(contextual_kw);
|
self.contextual_kw.push(contextual_kw);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,8 @@ pub(crate) fn to_parser_tokens(text: &str, lexer_tokens: &[lexer::Token]) -> ::p
|
|||||||
SyntaxKind::from_contextual_keyword(token_text).unwrap_or(SyntaxKind::IDENT);
|
SyntaxKind::from_contextual_keyword(token_text).unwrap_or(SyntaxKind::IDENT);
|
||||||
res.push_ident(contextual_kw);
|
res.push_ident(contextual_kw);
|
||||||
} else {
|
} else {
|
||||||
res.push(was_joint, t.kind);
|
res.was_joint(was_joint);
|
||||||
|
res.push(t.kind);
|
||||||
was_joint = true;
|
was_joint = true;
|
||||||
}
|
}
|
||||||
off += usize::from(t.len);
|
off += usize::from(t.len);
|
||||||
|
|||||||
Reference in New Issue
Block a user