pub(super) struct CoverageCounters {
counter_increment_sites: IndexVec<CounterId, Site>,
node_counters: IndexVec<BasicCoverageBlock, Option<BcbCounter>>,
expressions: IndexVec<ExpressionId, BcbExpression>,
expressions_memo: FxHashMap<BcbExpression, BcbCounter>,
}
Expand description
Generates and stores coverage counter and coverage expression information associated with nodes/edges in the BCB graph.
Fields§
§counter_increment_sites: IndexVec<CounterId, Site>
List of places where a counter-increment statement should be injected into MIR, each with its corresponding counter ID.
node_counters: IndexVec<BasicCoverageBlock, Option<BcbCounter>>
Coverage counters/expressions that are associated with individual BCBs.
expressions: IndexVec<ExpressionId, BcbExpression>
Table of expression data, associating each expression ID with its corresponding operator (+ or -) and its LHS/RHS operands.
expressions_memo: FxHashMap<BcbExpression, BcbCounter>
Remember expressions that have already been created (or simplified), so that we don’t create unnecessary duplicates.
Implementations§
Source§impl CoverageCounters
impl CoverageCounters
Sourcepub(super) fn make_bcb_counters(
graph: &CoverageGraph,
bcb_needs_counter: &BitSet<BasicCoverageBlock>,
) -> Self
pub(super) fn make_bcb_counters( graph: &CoverageGraph, bcb_needs_counter: &BitSet<BasicCoverageBlock>, ) -> Self
Ensures that each BCB node needing a counter has one, by creating physical counters or counter expressions for nodes and edges as required.
fn with_num_bcbs(num_bcbs: usize) -> Self
Sourcefn make_phys_counter(&mut self, site: Site) -> BcbCounter
fn make_phys_counter(&mut self, site: Site) -> BcbCounter
Creates a new physical counter for a BCB node or edge.
fn make_expression( &mut self, lhs: BcbCounter, op: Op, rhs: BcbCounter, ) -> BcbCounter
Sourcefn make_sum(&mut self, counters: &[BcbCounter]) -> Option<BcbCounter>
fn make_sum(&mut self, counters: &[BcbCounter]) -> Option<BcbCounter>
Creates a counter that is the sum of the given counters.
Returns None
if the given list of counters was empty.
Sourcefn make_subtracted_sum(
&mut self,
lhs: BcbCounter,
rhs: &[BcbCounter],
) -> BcbCounter
fn make_subtracted_sum( &mut self, lhs: BcbCounter, rhs: &[BcbCounter], ) -> BcbCounter
Creates a counter whose value is lhs - SUM(rhs)
.
pub(super) fn num_counters(&self) -> usize
fn set_node_counter( &mut self, bcb: BasicCoverageBlock, counter: BcbCounter, ) -> BcbCounter
pub(super) fn term_for_bcb(&self, bcb: BasicCoverageBlock) -> Option<CovTerm>
Sourcepub(super) fn counter_increment_sites(
&self,
) -> impl Iterator<Item = (CounterId, Site)> + Captures<'_>
pub(super) fn counter_increment_sites( &self, ) -> impl Iterator<Item = (CounterId, Site)> + Captures<'_>
Returns an iterator over all the nodes/edges in the coverage graph that should have a counter-increment statement injected into MIR, along with each site’s corresponding counter ID.
Sourcepub(super) fn bcb_nodes_with_coverage_expressions(
&self,
) -> impl Iterator<Item = (BasicCoverageBlock, ExpressionId)> + Captures<'_>
pub(super) fn bcb_nodes_with_coverage_expressions( &self, ) -> impl Iterator<Item = (BasicCoverageBlock, ExpressionId)> + Captures<'_>
Returns an iterator over the subset of BCB nodes that have been associated with a counter expression, along with the ID of that expression.
pub(super) fn into_expressions(self) -> IndexVec<ExpressionId, Expression>
Auto Trait Implementations§
impl DynSend for CoverageCounters
impl DynSync for CoverageCounters
impl Freeze for CoverageCounters
impl RefUnwindSafe for CoverageCounters
impl Send for CoverageCounters
impl Sync for CoverageCounters
impl Unpin for CoverageCounters
impl UnwindSafe for CoverageCounters
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 104 bytes