From 46422f722bdcadbf4462dd5a9c65756434b2d97a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 1 Jan 2018 22:13:04 +0300 Subject: Parser: first scraches --- src/tree/file_builder.rs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'src/tree') diff --git a/src/tree/file_builder.rs b/src/tree/file_builder.rs index eba850fef..da8b8f824 100644 --- a/src/tree/file_builder.rs +++ b/src/tree/file_builder.rs @@ -64,8 +64,14 @@ impl FileBuilder { } pub fn finish(self) -> File { - assert!(self.in_progress.is_empty()); - assert!(self.pos == (self.text.len() as u32).into()); + assert!( + self.in_progress.is_empty(), + "some nodes in FileBuilder are unfinished" + ); + assert!( + self.pos == (self.text.len() as u32).into(), + "nodes in FileBuilder do not cover the whole file" + ); File { text: self.text, nodes: self.nodes, @@ -81,11 +87,17 @@ impl FileBuilder { fn push_child(&mut self, mut child: NodeData) -> NodeIdx { child.parent = Some(self.current_id()); let id = self.new_node(child); - if let Some(sibling) = self.current_sibling() { - fill(&mut sibling.next_sibling, id); - return id + { + + let (parent, sibling) = *self.in_progress.last().unwrap(); + let slot = if let Some(idx) = sibling { + &mut self.nodes[idx].next_sibling + } else { + &mut self.nodes[parent].first_child + }; + fill(slot, id); } - fill(&mut self.current_parent().first_child, id); + self.in_progress.last_mut().unwrap().1 = Some(id); id } -- cgit v1.2.3