@@ -414,6 +414,52 @@ impl<I: Tokens> Buffer<I> {
414
414
} ) ;
415
415
}
416
416
417
+ pub fn merge_lt_gt ( & mut self ) {
418
+ debug_assert ! (
419
+ self . is( & tok!( '<' ) ) || self . is( & tok!( '>' ) ) ,
420
+ "parser should only call merge_lt_gt when encountering '<' or '>' token"
421
+ ) ;
422
+
423
+ let span = self . cur_span ( ) ;
424
+
425
+ if self . peek ( ) . is_none ( ) {
426
+ return ;
427
+ }
428
+
429
+ let next = self . next . as_ref ( ) . unwrap ( ) ;
430
+
431
+ if span. hi != next. span . lo {
432
+ return ;
433
+ }
434
+
435
+ let cur = self . cur . take ( ) . unwrap ( ) ;
436
+ let next = self . next . take ( ) . unwrap ( ) ;
437
+
438
+ let token = match ( & cur. token , & next. token ) {
439
+ ( tok ! ( '>' ) , tok ! ( '>' ) ) => tok ! ( ">>" ) ,
440
+ ( tok ! ( '>' ) , tok ! ( '=' ) ) => tok ! ( ">=" ) ,
441
+ ( tok ! ( '>' ) , tok ! ( ">>" ) ) => tok ! ( ">>>" ) ,
442
+ ( tok ! ( '>' ) , tok ! ( ">=" ) ) => tok ! ( ">>=" ) ,
443
+ ( tok ! ( '>' ) , tok ! ( ">>=" ) ) => tok ! ( ">>>=" ) ,
444
+ ( tok ! ( '<' ) , tok ! ( '<' ) ) => tok ! ( "<<" ) ,
445
+ ( tok ! ( '<' ) , tok ! ( '=' ) ) => tok ! ( "<=" ) ,
446
+ ( tok ! ( '<' ) , tok ! ( "<=" ) ) => tok ! ( "<<=" ) ,
447
+
448
+ _ => {
449
+ self . cur = Some ( cur) ;
450
+ self . next = Some ( next) ;
451
+ return ;
452
+ }
453
+ } ;
454
+ let span = span. with_hi ( next. span . hi ) ;
455
+
456
+ self . cur = Some ( TokenAndSpan {
457
+ token,
458
+ span,
459
+ had_line_break : cur. had_line_break ,
460
+ } ) ;
461
+ }
462
+
417
463
#[ inline]
418
464
pub fn is ( & mut self , expected : & Token ) -> bool {
419
465
match self . cur ( ) {
0 commit comments