summaryrefslogtreecommitdiff
path: root/chain/src/item/genins.rs
diff options
context:
space:
mode:
Diffstat (limited to 'chain/src/item/genins.rs')
-rw-r--r--chain/src/item/genins.rs23
1 files changed, 17 insertions, 6 deletions
diff --git a/chain/src/item/genins.rs b/chain/src/item/genins.rs
index bad0cfd..d5fb678 100644
--- a/chain/src/item/genins.rs
+++ b/chain/src/item/genins.rs
@@ -378,6 +378,8 @@ impl DefaultForest<ForestLabel<GrammarLabel>> {
let reduced = self.reduction(nth_child, pos, ter, atom.borrow(), false)?;
+ // dbg!(reduced, nth_child, self.is_empty_node(reduced)?);
+
if reduced != nth_child && !self.is_empty_node(reduced)? {
parents.clear();
parents.extend(self.parents_of(reduced)?);
@@ -514,6 +516,7 @@ impl DefaultForest<ForestLabel<GrammarLabel>> {
if stack.is_empty() {
dbg!(
+ is_empty_segment,
label,
atom_child,
parents,
@@ -698,12 +701,13 @@ impl DefaultForest<ForestLabel<GrammarLabel>> {
Ok(nth_child)
}
}
- PaVi::Virtual(nt, t, mut node) => {
- let node_label_start = self
+ PaVi::Virtual(nt, t, node) => {
+ let node_label = self
.vertex_label(node)?
.ok_or(Error::NodeNoLabel(node))?
- .label()
- .start();
+ .label();
+
+ let node_label_start = node_label.start();
let reduction_fragment = atom.generate_virtual_frags(nt, t, None);
@@ -719,9 +723,16 @@ impl DefaultForest<ForestLabel<GrammarLabel>> {
for frag in reduction_fragment.into_iter().flatten() {
let mut frag = frag.clone();
- frag.set_pos(atom, node_label_start, true)?;
+ let _root_closed_p = frag.set_pos(atom, node_label_start, true)?;
+
+ // NOTE: If the root is closed, planting it might
+ // affect the original node, but we shall not deal
+ // with this phenomenon here.
+ //
+ // Instead, we will ignore the extra node at later
+ // stages.
- node = self.plant_at_start(node, frag)?;
+ self.plant_at_start(node, frag)?;
}
Ok(node)