@@ -638,25 +638,33 @@ impl CodeMap {
638638fn  find_width_of_character_at_span ( & self ,  sp :  Span ,  forwards :  bool )  -> u32  { 
639639        // Disregard malformed spans and assume a one-byte wide character. 
640640        if  sp. lo ( )  >= sp. hi ( )  { 
641+             debug ! ( "find_width_of_character_at_span: early return malformed span" ) ; 
641642            return  1 ; 
642643        } 
643644
644645        let  local_begin = self . lookup_byte_offset ( sp. lo ( ) ) ; 
645646        let  local_end = self . lookup_byte_offset ( sp. hi ( ) ) ; 
647+         debug ! ( "find_width_of_character_at_span: local_begin=`{:?}`, local_end=`{:?}`" , 
648+                local_begin,  local_end) ; 
646649
647650        let  start_index = local_begin. pos . to_usize ( ) ; 
648651        let  end_index = local_end. pos . to_usize ( ) ; 
652+         debug ! ( "find_width_of_character_at_span: start_index=`{:?}`, end_index=`{:?}`" , 
653+                start_index,  end_index) ; 
649654
650655        // Disregard indexes that are at the start or end of their spans, they can't fit bigger 
651656        // characters. 
652657        if  ( !forwards && end_index == usize:: min_value ( ) )  ||
653658            ( forwards && start_index == usize:: max_value ( ) )  { 
659+             debug ! ( "find_width_of_character_at_span: start or end of span, cannot be multibyte" ) ; 
654660            return  1 ; 
655661        } 
656662
657663        let  source_len = ( local_begin. fm . end_pos  - local_begin. fm . start_pos ) . to_usize ( ) ; 
664+         debug ! ( "find_width_of_character_at_span: source_len=`{:?}`" ,  source_len) ; 
658665        // Ensure indexes are also not malformed. 
659666        if  start_index > end_index || end_index > source_len { 
667+             debug ! ( "find_width_of_character_at_span: source indexes are malformed" ) ; 
660668            return  1 ; 
661669        } 
662670
@@ -671,16 +679,22 @@ impl CodeMap {
671679        }  else  { 
672680            return  1 ; 
673681        } ; 
674-         debug ! ( "DTW start {:?} end {:?}" ,  start_index,  end_index) ; 
675-         debug ! ( "DTW snippet {:?}" ,  snippet) ; 
682+         debug ! ( "find_width_of_character_at_span: snippet=`{:?}`" ,  snippet) ; 
683+ 
684+         let  file_start_pos = local_begin. fm . start_pos . to_usize ( ) ; 
685+         let  file_end_pos = local_begin. fm . end_pos . to_usize ( ) ; 
686+         debug ! ( "find_width_of_character_at_span: file_start_pos=`{:?}` file_end_pos=`{:?}`" , 
687+                file_start_pos,  file_end_pos) ; 
676688
677689        let  mut  target = if  forwards {  end_index + 1  }  else  {  end_index - 1  } ; 
678-         debug ! ( "DTW initial target {:?}" ,  target) ; 
679-         while  !snippet. is_char_boundary ( target - start_index)  { 
690+         debug ! ( "find_width_of_character_at_span: initial target=`{:?}`" ,  target) ; 
691+ 
692+         while  !snippet. is_char_boundary ( target - start_index) 
693+                 && target >= file_start_pos && target <= file_end_pos { 
680694            target = if  forwards {  target + 1  }  else  {  target - 1  } ; 
681-             debug ! ( "DTW update  target  {:?}" ,  target) ; 
695+             debug ! ( "find_width_of_character_at_span:  target=` {:?}` " ,  target) ; 
682696        } 
683-         debug ! ( "DTW  final target  {:?}" ,  target) ; 
697+         debug ! ( "find_width_of_character_at_span:  final target=` {:?}` " ,  target) ; 
684698
685699        if  forwards { 
686700            ( target - end_index)  as  u32 
0 commit comments