@@ -285,9 +285,8 @@ impl Marker {
285
285
}
286
286
_ => unreachable ! ( ) ,
287
287
}
288
- let finish_pos = p. events . len ( ) as u32 ;
289
288
p. push_event ( Event :: Finish ) ;
290
- CompletedMarker :: new ( self . pos , finish_pos , kind)
289
+ CompletedMarker :: new ( self . pos , kind)
291
290
}
292
291
293
292
/// Abandons the syntax tree node. All its children
@@ -305,14 +304,13 @@ impl Marker {
305
304
}
306
305
307
306
pub ( crate ) struct CompletedMarker {
308
- start_pos : u32 ,
309
- finish_pos : u32 ,
307
+ pos : u32 ,
310
308
kind : SyntaxKind ,
311
309
}
312
310
313
311
impl CompletedMarker {
314
- fn new ( start_pos : u32 , finish_pos : u32 , kind : SyntaxKind ) -> Self {
315
- CompletedMarker { start_pos , finish_pos , kind }
312
+ fn new ( pos : u32 , kind : SyntaxKind ) -> Self {
313
+ CompletedMarker { pos , kind }
316
314
}
317
315
318
316
/// This method allows to create a new node which starts
@@ -330,29 +328,22 @@ impl CompletedMarker {
330
328
/// distance to `NEWSTART` into forward_parent(=2 in this case);
331
329
pub ( crate ) fn precede ( self , p : & mut Parser ) -> Marker {
332
330
let new_pos = p. start ( ) ;
333
- let idx = self . start_pos as usize ;
331
+ let idx = self . pos as usize ;
334
332
match & mut p. events [ idx] {
335
333
Event :: Start { forward_parent, .. } => {
336
- * forward_parent = Some ( new_pos. pos - self . start_pos ) ;
334
+ * forward_parent = Some ( new_pos. pos - self . pos ) ;
337
335
}
338
336
_ => unreachable ! ( ) ,
339
337
}
340
338
new_pos
341
339
}
342
340
343
- /// Undo this completion and turns into a `Marker`
344
- pub ( crate ) fn undo_completion ( self , p : & mut Parser ) -> Marker {
345
- let start_idx = self . start_pos as usize ;
346
- let finish_idx = self . finish_pos as usize ;
347
- match & mut p. events [ start_idx] {
348
- Event :: Start { kind, forward_parent : None } => * kind = TOMBSTONE ,
349
- _ => unreachable ! ( ) ,
350
- }
351
- match & mut p. events [ finish_idx] {
352
- slot @ Event :: Finish => * slot = Event :: tombstone ( ) ,
353
- _ => unreachable ! ( ) ,
354
- }
355
- Marker :: new ( self . start_pos )
341
+ /// Extends this completed marker *to the left* up to `m`.
342
+ pub ( crate ) fn extend_to ( self , p : & mut Parser , mut m : Marker ) {
343
+ assert ! ( m. pos <= self . pos) ;
344
+ m. bomb . defuse ( ) ;
345
+
346
+ p. events . swap ( self . pos as usize , m. pos as usize ) ;
356
347
}
357
348
358
349
pub ( crate ) fn kind ( & self ) -> SyntaxKind {
0 commit comments