1+ use rustc_data_structures:: captures:: Captures ;
12use rustc_middle:: mir:: {
23 self , FakeReadCause , Statement , StatementKind , Terminator , TerminatorKind ,
34} ;
@@ -12,7 +13,7 @@ pub(super) fn mir_to_initial_sorted_coverage_spans(
1213 body_span : Span ,
1314 basic_coverage_blocks : & CoverageGraph ,
1415) -> Vec < CoverageSpan > {
15- let mut initial_spans = Vec :: < CoverageSpan > :: with_capacity ( mir_body. basic_blocks . len ( ) * 2 ) ;
16+ let mut initial_spans = Vec :: with_capacity ( mir_body. basic_blocks . len ( ) * 2 ) ;
1617 for ( bcb, bcb_data) in basic_coverage_blocks. iter_enumerated ( ) {
1718 initial_spans. extend ( bcb_to_initial_coverage_spans ( mir_body, body_span, bcb, bcb_data) ) ;
1819 }
@@ -50,34 +51,30 @@ pub(super) fn mir_to_initial_sorted_coverage_spans(
5051// for each `Statement` and `Terminator`. (Note that subsequent stages of coverage analysis will
5152// merge some `CoverageSpan`s, at which point a `CoverageSpan` may represent multiple
5253// `Statement`s and/or `Terminator`s.)
53- fn bcb_to_initial_coverage_spans (
54- mir_body : & mir:: Body < ' _ > ,
54+ fn bcb_to_initial_coverage_spans < ' a , ' tcx > (
55+ mir_body : & ' a mir:: Body < ' tcx > ,
5556 body_span : Span ,
5657 bcb : BasicCoverageBlock ,
57- bcb_data : & BasicCoverageBlockData ,
58- ) -> Vec < CoverageSpan > {
59- bcb_data
60- . basic_blocks
61- . iter ( )
62- . flat_map ( |& bb| {
63- let data = & mir_body[ bb] ;
64- data. statements
65- . iter ( )
66- . filter_map ( move |statement| {
67- filtered_statement_span ( statement) . map ( |span| {
68- CoverageSpan :: for_statement (
69- statement,
70- function_source_span ( span, body_span) ,
71- span,
72- bcb,
73- )
74- } )
58+ bcb_data : & ' a BasicCoverageBlockData ,
59+ ) -> impl Iterator < Item = CoverageSpan > + Captures < ' a > + Captures < ' tcx > {
60+ bcb_data. basic_blocks . iter ( ) . flat_map ( move |& bb| {
61+ let data = & mir_body[ bb] ;
62+ data. statements
63+ . iter ( )
64+ . filter_map ( move |statement| {
65+ filtered_statement_span ( statement) . map ( |span| {
66+ CoverageSpan :: for_statement (
67+ statement,
68+ function_source_span ( span, body_span) ,
69+ span,
70+ bcb,
71+ )
7572 } )
76- . chain ( filtered_terminator_span ( data . terminator ( ) ) . map ( |span| {
77- CoverageSpan :: for_terminator ( function_source_span ( span , body_span ) , span, bcb )
78- } ) )
79- } )
80- . collect ( )
73+ } )
74+ . chain ( filtered_terminator_span ( data . terminator ( ) ) . map ( | span| {
75+ CoverageSpan :: for_terminator ( function_source_span ( span , body_span ) , span , bcb )
76+ } ) )
77+ } )
8178}
8279
8380/// If the MIR `Statement` has a span contributive to computing coverage spans,
0 commit comments