[−][src]Struct rustc_mir_build::thir::pattern::_match::IntRange

struct IntRange<'tcx> {
    range: RangeInclusive<u128>,
    ty: Ty<'tcx>,
    span: Span,
}

An inclusive interval, used for precise integer exhaustiveness checking. IntRanges always store a contiguous range. This means that values are encoded such that 0 encodes the minimum value for the integer, regardless of the signedness. For example, the pattern -128..=127i8 is encoded as 0..=255. This makes comparisons and arithmetic on interval endpoints much more straightforward. See signed_bias for details.

IntRange is never used to encode an empty range or a "range" that wraps around the (offset) space: i.e., range.lo <= range.hi.

Fields

range: RangeInclusive<u128>ty: Ty<'tcx>span: Span

Implementations

impl<'tcx> IntRange<'tcx>[src]

fn is_integral(ty: Ty<'_>) -> bool[src]

fn is_singleton(&self) -> bool[src]

fn boundaries(&self) -> (u128, u128)[src]

fn treat_exhaustively(&self, tcx: TyCtxt<'tcx>) -> bool[src]

Don't treat usize/isize exhaustively unless the precise_pointer_size_matching feature is enabled.

fn integral_size_and_signed_bias(
    tcx: TyCtxt<'tcx>,
    ty: Ty<'_>
) -> Option<(Size, u128)>
[src]

fn from_const(
    tcx: TyCtxt<'tcx>,
    param_env: ParamEnv<'tcx>,
    value: &Const<'tcx>,
    span: Span
) -> Option<IntRange<'tcx>>
[src]

fn from_range(
    tcx: TyCtxt<'tcx>,
    lo: u128,
    hi: u128,
    ty: Ty<'tcx>,
    end: &RangeEnd,
    span: Span
) -> Option<IntRange<'tcx>>
[src]

fn from_pat(
    tcx: TyCtxt<'tcx>,
    param_env: ParamEnv<'tcx>,
    pat: &Pat<'tcx>
) -> Option<IntRange<'tcx>>
[src]

fn signed_bias(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> u128[src]

fn subtract_from(&self, ranges: Vec<IntRange<'tcx>>) -> Vec<IntRange<'tcx>>[src]

Returns a collection of ranges that spans the values covered by ranges, subtracted by the values covered by self: i.e., ranges \ self (in set notation).

fn is_subrange(&self, other: &Self) -> bool[src]

fn intersection(&self, tcx: TyCtxt<'tcx>, other: &Self) -> Option<Self>[src]

fn suspicious_intersection(&self, other: &Self) -> bool[src]

fn to_pat(&self, tcx: TyCtxt<'tcx>) -> Pat<'tcx>[src]

Trait Implementations

impl<'tcx> Clone for IntRange<'tcx>[src]

impl<'tcx> Debug for IntRange<'tcx>[src]

impl<'tcx> PartialEq<IntRange<'tcx>> for IntRange<'tcx>[src]

Ignore spans when comparing, they don't carry semantic information as they are only for lints.

Auto Trait Implementations

impl<'tcx> !RefUnwindSafe for IntRange<'tcx>

impl<'tcx> !Send for IntRange<'tcx>

impl<'tcx> !Sync for IntRange<'tcx>

impl<'tcx> Unpin for IntRange<'tcx>

impl<'tcx> !UnwindSafe for IntRange<'tcx>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized, 
[src]

impl<T> Borrow<T> for T where
    T: ?Sized, 
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized, 
[src]

impl<'a, T> Captures<'a> for T where
    T: ?Sized, 
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone, 
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.