1
+ use rustc_data_structures:: captures:: Captures ;
1
2
use rustc_middle:: mir:: {
2
3
self , FakeReadCause , Statement , StatementKind , Terminator , TerminatorKind ,
3
4
} ;
@@ -12,7 +13,7 @@ pub(super) fn mir_to_initial_sorted_coverage_spans(
12
13
body_span : Span ,
13
14
basic_coverage_blocks : & CoverageGraph ,
14
15
) -> 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 ) ;
16
17
for ( bcb, bcb_data) in basic_coverage_blocks. iter_enumerated ( ) {
17
18
initial_spans. extend ( bcb_to_initial_coverage_spans ( mir_body, body_span, bcb, bcb_data) ) ;
18
19
}
@@ -50,34 +51,30 @@ pub(super) fn mir_to_initial_sorted_coverage_spans(
50
51
// for each `Statement` and `Terminator`. (Note that subsequent stages of coverage analysis will
51
52
// merge some `CoverageSpan`s, at which point a `CoverageSpan` may represent multiple
52
53
// `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 > ,
55
56
body_span : Span ,
56
57
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
+ )
75
72
} )
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
+ } )
81
78
}
82
79
83
80
/// If the MIR `Statement` has a span contributive to computing coverage spans,
0 commit comments