@@ -663,8 +663,10 @@ impl flags::AnalysisStats {
663663 bar. println ( msg ( ) ) ;
664664 }
665665 bar. set_message ( msg) ;
666- let ( body, sm ) = db. body_with_source_map ( body_id. into ( ) ) ;
666+ let body = db. body ( body_id. into ( ) ) ;
667667 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 ;
668670
669671 // region:expressions
670672 let ( previous_exprs, previous_unknown, previous_partially_unknown) =
@@ -675,7 +677,8 @@ impl flags::AnalysisStats {
675677 let unknown_or_partial = if ty. is_unknown ( ) {
676678 num_exprs_unknown += 1 ;
677679 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+ {
679682 bar. println ( format ! (
680683 "{} {}:{}-{}:{}: Unknown type" ,
681684 path,
@@ -699,7 +702,7 @@ impl flags::AnalysisStats {
699702 } ;
700703 if self . only . is_some ( ) && verbosity. is_spammy ( ) {
701704 // 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) {
703706 bar. println ( format ! (
704707 "{}:{}-{}:{}: {}" ,
705708 start. line + 1 ,
@@ -715,14 +718,15 @@ impl flags::AnalysisStats {
715718 if unknown_or_partial && self . output == Some ( OutputFormat :: Csv ) {
716719 println ! (
717720 r#"{},type,"{}""# ,
718- location_csv_expr( db, vfs, & sm, expr_id) ,
721+ location_csv_expr( db, vfs, & sm( ) , expr_id) ,
719722 ty. display( db)
720723 ) ;
721724 }
722725 if let Some ( mismatch) = inference_result. type_mismatch_for_expr ( expr_id) {
723726 num_expr_type_mismatches += 1 ;
724727 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+ {
726730 bar. println ( format ! (
727731 "{} {}:{}-{}:{}: Expected {}, got {}" ,
728732 path,
@@ -745,7 +749,7 @@ impl flags::AnalysisStats {
745749 if self . output == Some ( OutputFormat :: Csv ) {
746750 println ! (
747751 r#"{},mismatch,"{}","{}""# ,
748- location_csv_expr( db, vfs, & sm, expr_id) ,
752+ location_csv_expr( db, vfs, & sm( ) , expr_id) ,
749753 mismatch. expected. display( db) ,
750754 mismatch. actual. display( db)
751755 ) ;
@@ -772,7 +776,7 @@ impl flags::AnalysisStats {
772776 let unknown_or_partial = if ty. is_unknown ( ) {
773777 num_pats_unknown += 1 ;
774778 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) {
776780 bar. println ( format ! (
777781 "{} {}:{}-{}:{}: Unknown type" ,
778782 path,
@@ -796,7 +800,7 @@ impl flags::AnalysisStats {
796800 } ;
797801 if self . only . is_some ( ) && verbosity. is_spammy ( ) {
798802 // 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) {
800804 bar. println ( format ! (
801805 "{}:{}-{}:{}: {}" ,
802806 start. line + 1 ,
@@ -812,14 +816,14 @@ impl flags::AnalysisStats {
812816 if unknown_or_partial && self . output == Some ( OutputFormat :: Csv ) {
813817 println ! (
814818 r#"{},type,"{}""# ,
815- location_csv_pat( db, vfs, & sm, pat_id) ,
819+ location_csv_pat( db, vfs, & sm( ) , pat_id) ,
816820 ty. display( db)
817821 ) ;
818822 }
819823 if let Some ( mismatch) = inference_result. type_mismatch_for_pat ( pat_id) {
820824 num_pat_type_mismatches += 1 ;
821825 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) {
823827 bar. println ( format ! (
824828 "{} {}:{}-{}:{}: Expected {}, got {}" ,
825829 path,
@@ -842,7 +846,7 @@ impl flags::AnalysisStats {
842846 if self . output == Some ( OutputFormat :: Csv ) {
843847 println ! (
844848 r#"{},mismatch,"{}","{}""# ,
845- location_csv_pat( db, vfs, & sm, pat_id) ,
849+ location_csv_pat( db, vfs, & sm( ) , pat_id) ,
846850 mismatch. expected. display( db) ,
847851 mismatch. actual. display( db)
848852 ) ;
@@ -957,7 +961,7 @@ impl flags::AnalysisStats {
957961 bar. println ( msg ( ) ) ;
958962 }
959963 bar. set_message ( msg) ;
960- db. body_with_source_map ( body_id. into ( ) ) ;
964+ db. body ( body_id. into ( ) ) ;
961965 bar. inc ( 1 ) ;
962966 }
963967
0 commit comments