|
| 1 | +use std::collections::BTreeSet; |
| 2 | + |
1 | 3 | use rustc_data_structures::graph::DirectedGraph;
|
2 | 4 | use rustc_index::bit_set::BitSet;
|
3 | 5 | use rustc_middle::mir;
|
4 | 6 | use rustc_middle::mir::coverage::ConditionInfo;
|
5 | 7 | use rustc_span::{BytePos, Span};
|
6 |
| -use std::collections::BTreeSet; |
7 | 8 |
|
8 | 9 | use crate::coverage::graph::{BasicCoverageBlock, CoverageGraph, START_BCB};
|
9 |
| -use crate::coverage::spans::from_mir::SpanFromMir; |
| 10 | +use crate::coverage::spans::from_mir::{extract_branch_pairs, extract_mcdc_mappings, SpanFromMir}; |
10 | 11 | use crate::coverage::ExtractedHirInfo;
|
11 | 12 |
|
12 | 13 | mod from_mir;
|
@@ -91,28 +92,11 @@ pub(super) fn generate_coverage_spans(
|
91 | 92 | mappings.push(BcbMapping { kind: BcbMappingKind::Code(START_BCB), span });
|
92 | 93 | }
|
93 | 94 | } else {
|
94 |
| - let sorted_spans = from_mir::mir_to_initial_sorted_coverage_spans( |
95 |
| - mir_body, |
96 |
| - hir_info, |
97 |
| - basic_coverage_blocks, |
98 |
| - ); |
99 |
| - let coverage_spans = SpansRefiner::refine_sorted_spans(sorted_spans); |
100 |
| - mappings.extend(coverage_spans.into_iter().map(|RefinedCovspan { bcb, span, .. }| { |
101 |
| - // Each span produced by the generator represents an ordinary code region. |
102 |
| - BcbMapping { kind: BcbMappingKind::Code(bcb), span } |
103 |
| - })); |
104 |
| - |
105 |
| - branch_pairs.extend(from_mir::extract_branch_pairs( |
106 |
| - mir_body, |
107 |
| - hir_info, |
108 |
| - basic_coverage_blocks, |
109 |
| - )); |
110 |
| - |
111 |
| - mappings.extend(from_mir::extract_mcdc_mappings( |
112 |
| - mir_body, |
113 |
| - hir_info.body_span, |
114 |
| - basic_coverage_blocks, |
115 |
| - )); |
| 95 | + extract_refined_covspans(mir_body, hir_info, basic_coverage_blocks, &mut mappings); |
| 96 | + |
| 97 | + branch_pairs.extend(extract_branch_pairs(mir_body, hir_info, basic_coverage_blocks)); |
| 98 | + |
| 99 | + mappings.extend(extract_mcdc_mappings(mir_body, hir_info.body_span, basic_coverage_blocks)); |
116 | 100 | }
|
117 | 101 |
|
118 | 102 | if mappings.is_empty() && branch_pairs.is_empty() {
|
@@ -149,6 +133,24 @@ pub(super) fn generate_coverage_spans(
|
149 | 133 | Some(CoverageSpans { bcb_has_mappings, mappings, branch_pairs, test_vector_bitmap_bytes })
|
150 | 134 | }
|
151 | 135 |
|
| 136 | +#[allow(unused_imports)] // Remove this line during the actual split. |
| 137 | +pub(super) use from_mir::unexpand_into_body_span_with_visible_macro; |
| 138 | + |
| 139 | +pub(super) fn extract_refined_covspans( |
| 140 | + mir_body: &mir::Body<'_>, |
| 141 | + hir_info: &ExtractedHirInfo, |
| 142 | + basic_coverage_blocks: &CoverageGraph, |
| 143 | + mappings: &mut impl Extend<BcbMapping>, |
| 144 | +) { |
| 145 | + let sorted_spans = |
| 146 | + from_mir::mir_to_initial_sorted_coverage_spans(mir_body, hir_info, basic_coverage_blocks); |
| 147 | + let coverage_spans = SpansRefiner::refine_sorted_spans(sorted_spans); |
| 148 | + mappings.extend(coverage_spans.into_iter().map(|RefinedCovspan { bcb, span, .. }| { |
| 149 | + // Each span produced by the generator represents an ordinary code region. |
| 150 | + BcbMapping { kind: BcbMappingKind::Code(bcb), span } |
| 151 | + })); |
| 152 | +} |
| 153 | + |
152 | 154 | #[derive(Debug)]
|
153 | 155 | struct CurrCovspan {
|
154 | 156 | span: Span,
|
|
0 commit comments