Enum rustc_mir_build::thir::ExprKind [−][src]
pub enum ExprKind<'thir, 'tcx> {
Show variants
Scope {
region_scope: Scope,
lint_level: LintLevel,
value: &'thir Expr<'thir, 'tcx>,
},
Box {
value: &'thir Expr<'thir, 'tcx>,
},
If {
cond: &'thir Expr<'thir, 'tcx>,
then: &'thir Expr<'thir, 'tcx>,
else_opt: Option<&'thir Expr<'thir, 'tcx>>,
},
Call {
ty: Ty<'tcx>,
fun: &'thir Expr<'thir, 'tcx>,
args: &'thir [Expr<'thir, 'tcx>],
from_hir_call: bool,
fn_span: Span,
},
Deref {
arg: &'thir Expr<'thir, 'tcx>,
},
Binary {
op: BinOp,
lhs: &'thir Expr<'thir, 'tcx>,
rhs: &'thir Expr<'thir, 'tcx>,
},
LogicalOp {
op: LogicalOp,
lhs: &'thir Expr<'thir, 'tcx>,
rhs: &'thir Expr<'thir, 'tcx>,
},
Unary {
op: UnOp,
arg: &'thir Expr<'thir, 'tcx>,
},
Cast {
source: &'thir Expr<'thir, 'tcx>,
},
Use {
source: &'thir Expr<'thir, 'tcx>,
},
NeverToAny {
source: &'thir Expr<'thir, 'tcx>,
},
Pointer {
cast: PointerCast,
source: &'thir Expr<'thir, 'tcx>,
},
Loop {
body: &'thir Expr<'thir, 'tcx>,
},
Match {
scrutinee: &'thir Expr<'thir, 'tcx>,
arms: &'thir [Arm<'thir, 'tcx>],
},
Block {
body: Block<'thir, 'tcx>,
},
Assign {
lhs: &'thir Expr<'thir, 'tcx>,
rhs: &'thir Expr<'thir, 'tcx>,
},
AssignOp {
op: BinOp,
lhs: &'thir Expr<'thir, 'tcx>,
rhs: &'thir Expr<'thir, 'tcx>,
},
Field {
lhs: &'thir Expr<'thir, 'tcx>,
name: Field,
},
Index {
lhs: &'thir Expr<'thir, 'tcx>,
index: &'thir Expr<'thir, 'tcx>,
},
VarRef {
id: HirId,
},
UpvarRef {
closure_def_id: DefId,
var_hir_id: HirId,
},
Borrow {
borrow_kind: BorrowKind,
arg: &'thir Expr<'thir, 'tcx>,
},
AddressOf {
mutability: Mutability,
arg: &'thir Expr<'thir, 'tcx>,
},
Break {
label: Scope,
value: Option<&'thir Expr<'thir, 'tcx>>,
},
Continue {
label: Scope,
},
Return {
value: Option<&'thir Expr<'thir, 'tcx>>,
},
ConstBlock {
value: &'tcx Const<'tcx>,
},
Repeat {
value: &'thir Expr<'thir, 'tcx>,
count: &'tcx Const<'tcx>,
},
Array {
fields: &'thir [Expr<'thir, 'tcx>],
},
Tuple {
fields: &'thir [Expr<'thir, 'tcx>],
},
Adt {
adt_def: &'tcx AdtDef,
variant_index: VariantIdx,
substs: SubstsRef<'tcx>,
user_ty: Option<Canonical<'tcx, UserType<'tcx>>>,
fields: &'thir [FieldExpr<'thir, 'tcx>],
base: Option<FruInfo<'thir, 'tcx>>,
},
PlaceTypeAscription {
source: &'thir Expr<'thir, 'tcx>,
user_ty: Option<Canonical<'tcx, UserType<'tcx>>>,
},
ValueTypeAscription {
source: &'thir Expr<'thir, 'tcx>,
user_ty: Option<Canonical<'tcx, UserType<'tcx>>>,
},
Closure {
closure_id: DefId,
substs: UpvarSubsts<'tcx>,
upvars: &'thir [Expr<'thir, 'tcx>],
movability: Option<Movability>,
fake_reads: Vec<(&'thir Expr<'thir, 'tcx>, FakeReadCause, HirId)>,
},
Literal {
literal: &'tcx Const<'tcx>,
user_ty: Option<Canonical<'tcx, UserType<'tcx>>>,
const_id: Option<DefId>,
},
StaticRef {
literal: &'tcx Const<'tcx>,
def_id: DefId,
},
InlineAsm {
template: &'tcx [InlineAsmTemplatePiece],
operands: &'thir [InlineAsmOperand<'thir, 'tcx>],
options: InlineAsmOptions,
line_spans: &'tcx [Span],
},
ThreadLocalRef(DefId),
LlvmInlineAsm {
asm: &'tcx LlvmInlineAsmInner,
outputs: &'thir [Expr<'thir, 'tcx>],
inputs: &'thir [Expr<'thir, 'tcx>],
},
Yield {
value: &'thir Expr<'thir, 'tcx>,
},
}Variants
Fields of Box
value: &'thir Expr<'thir, 'tcx>Fields of If
Fields of Call
ty: Ty<'tcx>fun: &'thir Expr<'thir, 'tcx>args: &'thir [Expr<'thir, 'tcx>]from_hir_call: boolWhether this is from a call in HIR, rather than from an overloaded
operator. true for overloaded function call.
fn_span: SpanThis Span is the span of the function, without the dot and receiver
(e.g. foo(a, b) in x.foo(a, b)
Fields of Deref
arg: &'thir Expr<'thir, 'tcx>Fields of Cast
source: &'thir Expr<'thir, 'tcx>Fields of Use
source: &'thir Expr<'thir, 'tcx>Fields of NeverToAny
source: &'thir Expr<'thir, 'tcx>Fields of Pointer
cast: PointerCastsource: &'thir Expr<'thir, 'tcx>Fields of Loop
body: &'thir Expr<'thir, 'tcx>Fields of Block
body: Block<'thir, 'tcx>Fields of VarRef
id: HirIdUsed to represent upvars mentioned in a closure/generator
Fields of UpvarRef
Fields of Borrow
borrow_kind: BorrowKindarg: &'thir Expr<'thir, 'tcx>A &raw [const|mut] $place_expr raw borrow resulting in type *[const|mut] T.
Fields of AddressOf
mutability: Mutabilityarg: &'thir Expr<'thir, 'tcx>Fields of Continue
label: ScopeFields of ConstBlock
value: &'tcx Const<'tcx>Fields of Adt
Fields of PlaceTypeAscription
Fields of ValueTypeAscription
Fields of Closure
closure_id: DefIdsubsts: UpvarSubsts<'tcx>upvars: &'thir [Expr<'thir, 'tcx>]movability: Option<Movability>fake_reads: Vec<(&'thir Expr<'thir, 'tcx>, FakeReadCause, HirId)>Fields of Literal
A literal containing the address of a static.
This is only distinguished from Literal so that we can register some
info for diagnostics.
Fields of InlineAsm
template: &'tcx [InlineAsmTemplatePiece]operands: &'thir [InlineAsmOperand<'thir, 'tcx>]options: InlineAsmOptionsline_spans: &'tcx [Span]ThreadLocalRef(DefId)An expression taking a reference to a thread local.
Fields of LlvmInlineAsm
Fields of Yield
value: &'thir Expr<'thir, 'tcx>Trait Implementations
Auto Trait Implementations
impl<'thir, 'tcx> !RefUnwindSafe for ExprKind<'thir, 'tcx>
impl<'thir, 'tcx> !Send for ExprKind<'thir, 'tcx>
impl<'thir, 'tcx> !Sync for ExprKind<'thir, 'tcx>
impl<'thir, 'tcx> Unpin for ExprKind<'thir, 'tcx> where
'tcx: 'thir,
'tcx: 'thir,
impl<'thir, 'tcx> !UnwindSafe for ExprKind<'thir, 'tcx>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<'a, T> Captures<'a> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,