struct CoverageSpan {
    pub span: Span,
    pub expn_span: Span,
    pub current_macro_or_none: OnceCell<Option<Symbol>>,
    pub bcb: BasicCoverageBlock,
    pub coverage_statements: Vec<CoverageStatement>,
    pub is_closure: bool,
}
Expand description

A BCB is deconstructed into one or more Spans. Each Span maps to a CoverageSpan that references the originating BCB and one or more MIR Statements and/or Terminators. Initially, the Spans come from the Statements and Terminators, but subsequent transforms can combine adjacent Spans and CoverageSpan from the same BCB, merging the CoverageStatement vectors, and the Spans to cover the extent of the combined Spans.

Note: A CoverageStatement merged into another CoverageSpan may come from a BasicBlock that is not part of the CoverageSpan bcb if the statement was included because it’s Span matches or is subsumed by the Span associated with this CoverageSpan, and it’s BasicBlock dominates() the BasicBlocks in this CoverageSpan.

Fields§

§span: Span§expn_span: Span§current_macro_or_none: OnceCell<Option<Symbol>>§bcb: BasicCoverageBlock§coverage_statements: Vec<CoverageStatement>§is_closure: bool

Implementations§

source§

impl CoverageSpan

source

pub fn for_fn_sig(fn_sig_span: Span) -> Self

source

pub fn for_statement( statement: &Statement<'_>, span: Span, expn_span: Span, bcb: BasicCoverageBlock, bb: BasicBlock, stmt_index: usize ) -> Self

source

pub fn for_terminator( span: Span, expn_span: Span, bcb: BasicCoverageBlock, bb: BasicBlock ) -> Self

source

pub fn merge_from(&mut self, other: CoverageSpan)

source

pub fn cutoff_statements_at(&mut self, cutoff_pos: BytePos)

source

pub fn is_mergeable(&self, other: &Self) -> bool

source

pub fn is_in_same_bcb(&self, other: &Self) -> bool

source

pub fn current_macro(&self) -> Option<Symbol>

If the span is part of a macro, returns the macro name symbol.

source

pub fn visible_macro(&self, body_span: Span) -> Option<Symbol>

If the span is part of a macro, and the macro is visible (expands directly to the given body_span), returns the macro name symbol.

source

pub fn is_macro_expansion(&self) -> bool

Trait Implementations§

source§

impl Clone for CoverageSpan

source§

fn clone(&self) -> CoverageSpan

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CoverageSpan

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

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: 56 bytes