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.rs13
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 {