Enum rustc_mir_build::build::matches::TestKind
source · enum TestKind<'tcx> {
Switch {
adt_def: AdtDef<'tcx>,
variants: BitSet<VariantIdx>,
},
SwitchInt {
switch_ty: Ty<'tcx>,
options: FxIndexMap<ConstantKind<'tcx>, u128>,
},
Eq {
value: ConstantKind<'tcx>,
ty: Ty<'tcx>,
},
Range(Box<PatRange<'tcx>>),
Len {
len: u64,
op: BinOp,
},
}
Expand description
See Test
for more.
Variants
Switch
Fields
adt_def: AdtDef<'tcx>
The enum type being tested.
variants: BitSet<VariantIdx>
The set of variants that we should create a branch for. We also create an additional “otherwise” case.
Test what enum variant a value is.
SwitchInt
Fields
switch_ty: Ty<'tcx>
The type of the value that we’re testing.
options: FxIndexMap<ConstantKind<'tcx>, u128>
The (ordered) set of values that we test for.
For integers and char
s we create a branch to each of the values in
options
, as well as an “otherwise” branch for all other values, even
in the (rare) case that options
is exhaustive.
For bool
we always generate two edges, one for true
and one for
false
.
Test what value an integer, bool
, or char
has.
Eq
Test for equality with value, possibly after an unsizing coercion to
ty
,
Range(Box<PatRange<'tcx>>)
Test whether the value falls within an inclusive or exclusive range
Len
Test that the length of the slice is equal to len
.
Trait Implementations
sourceimpl<'tcx> PartialEq<TestKind<'tcx>> for TestKind<'tcx>
impl<'tcx> PartialEq<TestKind<'tcx>> for TestKind<'tcx>
impl<'tcx> StructuralPartialEq for TestKind<'tcx>
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for TestKind<'tcx>
impl<'tcx> Send for TestKind<'tcx>
impl<'tcx> Sync for TestKind<'tcx>
impl<'tcx> Unpin for TestKind<'tcx>
impl<'tcx> !UnwindSafe for TestKind<'tcx>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
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: 72 bytes
Size for each variant:
Switch
: 47 bytesSwitchInt
: 71 bytesEq
: 63 bytesRange
: 15 bytesLen
: 15 bytes