@@ -646,47 +646,41 @@ impl<'a, 'tcx> SpanDecoder for CacheDecoder<'a, 'tcx> {
646
646
let parent = Option :: < LocalDefId > :: decode ( self ) ;
647
647
let tag: u8 = Decodable :: decode ( self ) ;
648
648
649
- if tag == TAG_PARTIAL_SPAN {
650
- return Span :: new ( BytePos ( 0 ) , BytePos ( 0 ) , ctxt, parent) ;
651
- } else if tag == TAG_RELATIVE_SPAN {
652
- let dlo = u32:: decode ( self ) ;
653
- let dto = u32:: decode ( self ) ;
654
-
655
- let enclosing = self . tcx . source_span_untracked ( parent. unwrap ( ) ) . data_untracked ( ) ;
656
- let span = Span :: new (
657
- enclosing. lo + BytePos :: from_u32 ( dlo) ,
658
- enclosing. lo + BytePos :: from_u32 ( dto) ,
659
- ctxt,
660
- parent,
661
- ) ;
662
-
663
- return span;
664
- } else if tag == TAG_RELATIVE_OUTER_SPAN {
665
- let dlo = isize:: decode ( self ) ;
666
- let dto = isize:: decode ( self ) ;
667
-
668
- let enclosing = self . tcx . source_span_untracked ( parent. unwrap ( ) ) . data_untracked ( ) ;
669
- let span = Span :: new (
670
- BytePos :: from_usize ( ( enclosing. lo . to_u32 ( ) as isize + dlo) as usize ) ,
671
- BytePos :: from_usize ( ( enclosing. lo . to_u32 ( ) as isize + dto) as usize ) ,
672
- ctxt,
673
- parent,
674
- ) ;
675
-
676
- return span;
677
- } else {
678
- debug_assert_eq ! ( tag, TAG_FULL_SPAN ) ;
679
- }
680
-
681
- let file_lo_index = SourceFileIndex :: decode ( self ) ;
682
- let line_lo = usize:: decode ( self ) ;
683
- let col_lo = RelativeBytePos :: decode ( self ) ;
684
- let len = BytePos :: decode ( self ) ;
685
-
686
- let file_lo = self . file_index_to_file ( file_lo_index) ;
687
- let lo = file_lo. lines ( ) [ line_lo - 1 ] + col_lo;
688
- let lo = file_lo. absolute_position ( lo) ;
689
- let hi = lo + len;
649
+ let ( lo, hi) = match tag {
650
+ TAG_PARTIAL_SPAN => ( BytePos ( 0 ) , BytePos ( 0 ) ) ,
651
+ TAG_RELATIVE_SPAN => {
652
+ let dlo = u32:: decode ( self ) ;
653
+ let dto = u32:: decode ( self ) ;
654
+
655
+ let enclosing = self . tcx . source_span_untracked ( parent. unwrap ( ) ) . data_untracked ( ) ;
656
+ ( enclosing. lo + BytePos :: from_u32 ( dlo) , enclosing. lo + BytePos :: from_u32 ( dto) )
657
+ }
658
+ TAG_RELATIVE_OUTER_SPAN => {
659
+ let dlo = isize:: decode ( self ) ;
660
+ let dto = isize:: decode ( self ) ;
661
+
662
+ let enclosing = self . tcx . source_span_untracked ( parent. unwrap ( ) ) . data_untracked ( ) ;
663
+ let reference = enclosing. lo . to_u32 ( ) as isize ;
664
+ (
665
+ BytePos :: from_usize ( ( reference + dlo) as usize ) ,
666
+ BytePos :: from_usize ( ( reference + dto) as usize ) ,
667
+ )
668
+ }
669
+ TAG_FULL_SPAN => {
670
+ let file_lo_index = SourceFileIndex :: decode ( self ) ;
671
+ let line_lo = usize:: decode ( self ) ;
672
+ let col_lo = RelativeBytePos :: decode ( self ) ;
673
+ let len = BytePos :: decode ( self ) ;
674
+
675
+ let file_lo = self . file_index_to_file ( file_lo_index) ;
676
+ let lo = file_lo. lines ( ) [ line_lo - 1 ] + col_lo;
677
+ let lo = file_lo. absolute_position ( lo) ;
678
+ let hi = lo + len;
679
+
680
+ ( lo, hi)
681
+ }
682
+ _ => unreachable ! ( ) ,
683
+ } ;
690
684
691
685
Span :: new ( lo, hi, ctxt, parent)
692
686
}
0 commit comments