Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/parser/src/parser.rs')
| -rw-r--r-- | crates/parser/src/parser.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/crates/parser/src/parser.rs b/crates/parser/src/parser.rs index f6b8308c57..1f9961bb92 100644 --- a/crates/parser/src/parser.rs +++ b/crates/parser/src/parser.rs @@ -339,11 +339,16 @@ 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); + pub(crate) fn extend_to(self, p: &mut Parser, mut m: Marker) -> CompletedMarker { 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!(), + } + self } pub(crate) fn kind(&self) -> SyntaxKind { |