Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/parser/src/event.rs10
-rw-r--r--crates/parser/src/parser.rs10
2 files changed, 11 insertions, 9 deletions
diff --git a/crates/parser/src/event.rs b/crates/parser/src/event.rs
index 9036688921..41b0328027 100644
--- a/crates/parser/src/event.rs
+++ b/crates/parser/src/event.rs
@@ -93,8 +93,6 @@ pub(super) fn process(sink: &mut dyn TreeSink, mut events: Vec<Event>) {
for i in 0..events.len() {
match mem::replace(&mut events[i], Event::tombstone()) {
- Event::Start { kind: TOMBSTONE, .. } => (),
-
Event::Start { kind, forward_parent } => {
// For events[A, B, C], B is A's forward_parent, C is B's forward_parent,
// in the normal control flow, the parent-child relation: `A -> B -> C`,
@@ -109,9 +107,7 @@ pub(super) fn process(sink: &mut dyn TreeSink, mut events: Vec<Event>) {
// append `A`'s forward_parent `B`
fp = match mem::replace(&mut events[idx], Event::tombstone()) {
Event::Start { kind, forward_parent } => {
- if kind != TOMBSTONE {
- forward_parents.push(kind);
- }
+ forward_parents.push(kind);
forward_parent
}
_ => unreachable!(),
@@ -120,7 +116,9 @@ pub(super) fn process(sink: &mut dyn TreeSink, mut events: Vec<Event>) {
}
for kind in forward_parents.drain(..).rev() {
- sink.start_node(kind);
+ if kind != TOMBSTONE {
+ sink.start_node(kind);
+ }
}
}
Event::Finish => sink.finish_node(),
diff --git a/crates/parser/src/parser.rs b/crates/parser/src/parser.rs
index f6b8308c57..ff2af130be 100644
--- a/crates/parser/src/parser.rs
+++ b/crates/parser/src/parser.rs
@@ -340,10 +340,14 @@ impl CompletedMarker {
/// Extends this completed marker *to the left* up to `m`.
pub(crate) fn extend_to(self, p: &mut Parser, mut m: Marker) {
- assert!(m.pos <= self.pos);
m.bomb.defuse();
-
- p.events.swap(self.pos as usize, m.pos as usize);
+ let idx = m.pos as usize;
+ match &mut p.events[idx] {
+ Event::Start { forward_parent, .. } => {
+ *forward_parent = Some(self.pos - m.pos);
+ }
+ _ => unreachable!(),
+ }
}
pub(crate) fn kind(&self) -> SyntaxKind {