summaryrefslogtreecommitdiff
path: root/src/parse/parser.rs
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2021-10-31 18:52:48 +0100
committerMartin Haug <mhaug@live.de>2021-11-05 13:44:49 +0100
commit2e7d359e59a45849f53eea6e022ca83295f5a6e7 (patch)
tree6fc2b3e3f1c12f1326061cd09a374fc6dca3026a /src/parse/parser.rs
parentc569e14c07902b23b7b3e29df4076cea1f4496cf (diff)
Unicode escape error moved to tokenizer
Diffstat (limited to 'src/parse/parser.rs')
-rw-r--r--src/parse/parser.rs24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/parse/parser.rs b/src/parse/parser.rs
index e6fcc1ae..240de43d 100644
--- a/src/parse/parser.rs
+++ b/src/parse/parser.rs
@@ -186,9 +186,27 @@ impl<'s> Parser<'s> {
}
pub fn convert(&mut self, kind: NodeKind) {
- self.start();
- self.eat();
- self.end(kind);
+ let len = self.tokens.index() - self.next_start;
+
+ self.children.push(
+ GreenNode::with_child(
+ kind,
+ len,
+ GreenData::new(self.next.clone().unwrap(), len),
+ )
+ .into(),
+ );
+ self.fast_forward();
+ self.success = true;
+ }
+
+ pub fn convert_with(&mut self, preserve: usize, kind: NodeKind) {
+ let preserved: Vec<_> =
+ self.children.drain(self.children.len() - preserve ..).collect();
+ let len = preserved.iter().map(|c| c.len()).sum();
+ self.children
+ .push(GreenNode::with_children(kind, len, preserved).into());
+ self.success = true;
}
/// End the current node and undo its existence, inling all accumulated