@@ -318,7 +318,8 @@ impl Marker {
318318 _ => unreachable ! ( ) ,
319319 }
320320 p. push_event ( Event :: Finish ) ;
321- CompletedMarker :: new ( self . pos , kind)
321+ let end_pos = p. events . len ( ) as u32 ;
322+ CompletedMarker :: new ( self . pos , end_pos, kind)
322323 }
323324
324325 /// Abandons the syntax tree node. All its children
@@ -336,13 +337,14 @@ impl Marker {
336337}
337338
338339pub ( crate ) struct CompletedMarker {
339- pos : u32 ,
340+ start_pos : u32 ,
341+ end_pos : u32 ,
340342 kind : SyntaxKind ,
341343}
342344
343345impl CompletedMarker {
344- fn new ( pos : u32 , kind : SyntaxKind ) -> Self {
345- CompletedMarker { pos , kind }
346+ fn new ( start_pos : u32 , end_pos : u32 , kind : SyntaxKind ) -> Self {
347+ CompletedMarker { start_pos , end_pos , kind }
346348 }
347349
348350 /// This method allows to create a new node which starts
@@ -360,10 +362,10 @@ impl CompletedMarker {
360362 /// distance to `NEWSTART` into forward_parent(=2 in this case);
361363 pub ( crate ) fn precede ( self , p : & mut Parser < ' _ > ) -> Marker {
362364 let new_pos = p. start ( ) ;
363- let idx = self . pos as usize ;
365+ let idx = self . start_pos as usize ;
364366 match & mut p. events [ idx] {
365367 Event :: Start { forward_parent, .. } => {
366- * forward_parent = Some ( new_pos. pos - self . pos ) ;
368+ * forward_parent = Some ( new_pos. pos - self . start_pos ) ;
367369 }
368370 _ => unreachable ! ( ) ,
369371 }
@@ -376,7 +378,7 @@ impl CompletedMarker {
376378 let idx = m. pos as usize ;
377379 match & mut p. events [ idx] {
378380 Event :: Start { forward_parent, .. } => {
379- * forward_parent = Some ( self . pos - m. pos ) ;
381+ * forward_parent = Some ( self . start_pos - m. pos ) ;
380382 }
381383 _ => unreachable ! ( ) ,
382384 }
@@ -386,4 +388,15 @@ impl CompletedMarker {
386388 pub ( crate ) fn kind ( & self ) -> SyntaxKind {
387389 self . kind
388390 }
391+
392+ pub ( crate ) fn last_token ( & self , p : & Parser < ' _ > ) -> Option < SyntaxKind > {
393+ let end_pos = self . end_pos as usize ;
394+ if end_pos > p. events . len ( ) {
395+ return None ;
396+ }
397+ p. events [ ..end_pos] . iter ( ) . rev ( ) . find_map ( |event| match event {
398+ Event :: Token { kind, .. } => Some ( * kind) ,
399+ _ => None ,
400+ } )
401+ }
389402}
0 commit comments