@@ -663,8 +663,10 @@ impl flags::AnalysisStats {
663
663
bar. println ( msg ( ) ) ;
664
664
}
665
665
bar. set_message ( msg) ;
666
- let ( body, sm ) = db. body_with_source_map ( body_id. into ( ) ) ;
666
+ let body = db. body ( body_id. into ( ) ) ;
667
667
let inference_result = db. infer ( body_id. into ( ) ) ;
668
+ // This query is LRU'd, so actually calling it will skew the timing results.
669
+ let sm = || db. body_with_source_map ( body_id. into ( ) ) . 1 ;
668
670
669
671
// region:expressions
670
672
let ( previous_exprs, previous_unknown, previous_partially_unknown) =
@@ -675,7 +677,8 @@ impl flags::AnalysisStats {
675
677
let unknown_or_partial = if ty. is_unknown ( ) {
676
678
num_exprs_unknown += 1 ;
677
679
if verbosity. is_spammy ( ) {
678
- if let Some ( ( path, start, end) ) = expr_syntax_range ( db, vfs, & sm, expr_id) {
680
+ if let Some ( ( path, start, end) ) = expr_syntax_range ( db, vfs, & sm ( ) , expr_id)
681
+ {
679
682
bar. println ( format ! (
680
683
"{} {}:{}-{}:{}: Unknown type" ,
681
684
path,
@@ -699,7 +702,7 @@ impl flags::AnalysisStats {
699
702
} ;
700
703
if self . only . is_some ( ) && verbosity. is_spammy ( ) {
701
704
// in super-verbose mode for just one function, we print every single expression
702
- if let Some ( ( _, start, end) ) = expr_syntax_range ( db, vfs, & sm, expr_id) {
705
+ if let Some ( ( _, start, end) ) = expr_syntax_range ( db, vfs, & sm ( ) , expr_id) {
703
706
bar. println ( format ! (
704
707
"{}:{}-{}:{}: {}" ,
705
708
start. line + 1 ,
@@ -715,14 +718,15 @@ impl flags::AnalysisStats {
715
718
if unknown_or_partial && self . output == Some ( OutputFormat :: Csv ) {
716
719
println ! (
717
720
r#"{},type,"{}""# ,
718
- location_csv_expr( db, vfs, & sm, expr_id) ,
721
+ location_csv_expr( db, vfs, & sm( ) , expr_id) ,
719
722
ty. display( db)
720
723
) ;
721
724
}
722
725
if let Some ( mismatch) = inference_result. type_mismatch_for_expr ( expr_id) {
723
726
num_expr_type_mismatches += 1 ;
724
727
if verbosity. is_verbose ( ) {
725
- if let Some ( ( path, start, end) ) = expr_syntax_range ( db, vfs, & sm, expr_id) {
728
+ if let Some ( ( path, start, end) ) = expr_syntax_range ( db, vfs, & sm ( ) , expr_id)
729
+ {
726
730
bar. println ( format ! (
727
731
"{} {}:{}-{}:{}: Expected {}, got {}" ,
728
732
path,
@@ -745,7 +749,7 @@ impl flags::AnalysisStats {
745
749
if self . output == Some ( OutputFormat :: Csv ) {
746
750
println ! (
747
751
r#"{},mismatch,"{}","{}""# ,
748
- location_csv_expr( db, vfs, & sm, expr_id) ,
752
+ location_csv_expr( db, vfs, & sm( ) , expr_id) ,
749
753
mismatch. expected. display( db) ,
750
754
mismatch. actual. display( db)
751
755
) ;
@@ -772,7 +776,7 @@ impl flags::AnalysisStats {
772
776
let unknown_or_partial = if ty. is_unknown ( ) {
773
777
num_pats_unknown += 1 ;
774
778
if verbosity. is_spammy ( ) {
775
- if let Some ( ( path, start, end) ) = pat_syntax_range ( db, vfs, & sm, pat_id) {
779
+ if let Some ( ( path, start, end) ) = pat_syntax_range ( db, vfs, & sm ( ) , pat_id) {
776
780
bar. println ( format ! (
777
781
"{} {}:{}-{}:{}: Unknown type" ,
778
782
path,
@@ -796,7 +800,7 @@ impl flags::AnalysisStats {
796
800
} ;
797
801
if self . only . is_some ( ) && verbosity. is_spammy ( ) {
798
802
// in super-verbose mode for just one function, we print every single pattern
799
- if let Some ( ( _, start, end) ) = pat_syntax_range ( db, vfs, & sm, pat_id) {
803
+ if let Some ( ( _, start, end) ) = pat_syntax_range ( db, vfs, & sm ( ) , pat_id) {
800
804
bar. println ( format ! (
801
805
"{}:{}-{}:{}: {}" ,
802
806
start. line + 1 ,
@@ -812,14 +816,14 @@ impl flags::AnalysisStats {
812
816
if unknown_or_partial && self . output == Some ( OutputFormat :: Csv ) {
813
817
println ! (
814
818
r#"{},type,"{}""# ,
815
- location_csv_pat( db, vfs, & sm, pat_id) ,
819
+ location_csv_pat( db, vfs, & sm( ) , pat_id) ,
816
820
ty. display( db)
817
821
) ;
818
822
}
819
823
if let Some ( mismatch) = inference_result. type_mismatch_for_pat ( pat_id) {
820
824
num_pat_type_mismatches += 1 ;
821
825
if verbosity. is_verbose ( ) {
822
- if let Some ( ( path, start, end) ) = pat_syntax_range ( db, vfs, & sm, pat_id) {
826
+ if let Some ( ( path, start, end) ) = pat_syntax_range ( db, vfs, & sm ( ) , pat_id) {
823
827
bar. println ( format ! (
824
828
"{} {}:{}-{}:{}: Expected {}, got {}" ,
825
829
path,
@@ -842,7 +846,7 @@ impl flags::AnalysisStats {
842
846
if self . output == Some ( OutputFormat :: Csv ) {
843
847
println ! (
844
848
r#"{},mismatch,"{}","{}""# ,
845
- location_csv_pat( db, vfs, & sm, pat_id) ,
849
+ location_csv_pat( db, vfs, & sm( ) , pat_id) ,
846
850
mismatch. expected. display( db) ,
847
851
mismatch. actual. display( db)
848
852
) ;
@@ -957,7 +961,7 @@ impl flags::AnalysisStats {
957
961
bar. println ( msg ( ) ) ;
958
962
}
959
963
bar. set_message ( msg) ;
960
- db. body_with_source_map ( body_id. into ( ) ) ;
964
+ db. body ( body_id. into ( ) ) ;
961
965
bar. inc ( 1 ) ;
962
966
}
963
967
0 commit comments