@@ -600,36 +600,45 @@ impl Cursor<'_> {
600
600
/// (amount of the '#' symbols, raw string started, raw string terminated)
601
601
fn raw_double_quoted_string ( & mut self ) -> ( usize , bool , bool ) {
602
602
debug_assert ! ( self . prev( ) == 'r' ) ;
603
+ let mut started: bool = false ;
604
+ let mut finished: bool = false ;
605
+
603
606
// Count opening '#' symbols.
604
- let n_hashes = {
605
- let mut acc: usize = 0 ;
606
- loop {
607
- match self . bump ( ) {
608
- Some ( '#' ) => acc += 1 ,
609
- Some ( '"' ) => break acc,
610
- None | Some ( _) => return ( acc, false , false ) ,
611
- }
607
+ let n_hashes = self . eat_while ( |c| c == '#' ) ;
608
+
609
+ // Check that string is started.
610
+ match self . bump ( ) {
611
+ Some ( '"' ) => started = true ,
612
+ _ => return ( n_hashes, started, finished) ,
613
+ }
614
+
615
+ // Skip the string contents and on each '#' character met, check if this is
616
+ // a raw string termination.
617
+ while !finished {
618
+ self . eat_while ( |c| c != '"' ) ;
619
+
620
+ if self . is_eof ( ) {
621
+ return ( n_hashes, started, finished) ;
612
622
}
613
- } ;
614
623
615
- // Skip the string itself and check that amount of closing '#'
616
- // symbols is equal to the amount of opening ones.
617
- loop {
618
- match self . bump ( ) {
619
- Some ( '"' ) => {
620
- let mut acc = n_hashes;
621
- while self . nth_char ( 0 ) == '#' && acc > 0 {
622
- self . bump ( ) ;
623
- acc -= 1 ;
624
- }
625
- if acc == 0 {
626
- return ( n_hashes, true , true ) ;
627
- }
624
+ // Eat closing double quote.
625
+ self . bump ( ) ;
626
+
627
+ // Check that amount of closing '#' symbols
628
+ // is equal to the amount of opening ones.
629
+ let mut hashes_left = n_hashes;
630
+ let is_closing_hash = |c| {
631
+ if c == '#' && hashes_left != 0 {
632
+ hashes_left -= 1 ;
633
+ true
634
+ } else {
635
+ false
628
636
}
629
- Some ( _) => ( ) ,
630
- None => return ( n_hashes, true , false ) ,
631
- }
637
+ } ;
638
+ finished = self . eat_while ( is_closing_hash) == n_hashes;
632
639
}
640
+
641
+ ( n_hashes, started, finished)
633
642
}
634
643
635
644
fn eat_decimal_digits ( & mut self ) -> bool {
0 commit comments