Skip to main content

ExprKind

Enum ExprKind 

Source
pub enum ExprKind {
Show 22 variants If { condition: Expr, then: Expr, else_: Option<Expr>, }, App { head: Expr, args: Vec<Expr>, generic_args: Vec<GenericValue>, bounds_impls: Vec<ImplExpr>, trait_: Option<(ImplExpr, Vec<GenericValue>)>, }, Literal(Literal), Array(Vec<Expr>), Construct { constructor: GlobalId, is_record: bool, is_struct: bool, fields: Vec<(GlobalId, Expr)>, base: Option<Expr>, }, Match { scrutinee: Expr, arms: Vec<Arm>, }, Borrow { mutable: bool, inner: Expr, }, AddressOf { mutable: bool, inner: Expr, }, Let { lhs: Pat, rhs: Expr, body: Expr, }, GlobalId(GlobalId), LocalId(LocalId), Ascription { e: Expr, ty: Ty, }, Assign { lhs: Lhs, value: Expr, }, Loop { body: Expr, kind: Box<LoopKind>, state: Option<LoopState>, control_flow: Option<ControlFlowKind>, label: Option<Symbol>, }, Break { value: Expr, label: Option<Symbol>, state: Option<Expr>, }, Return { value: Expr, }, Continue { label: Option<Symbol>, state: Option<Expr>, }, Closure { params: Vec<Pat>, body: Expr, captures: Vec<Expr>, }, Block { body: Expr, safety_mode: SafetyKind, }, Quote { contents: Quote, }, Resugared(ResugaredExprKind), Error(ErrorNode),
}
Expand description

Describes the shape of an expression.

Variants§

§

If

If expression.

§Example:

if x > 0 { 1 } else { 2 }

Fields

§condition: Expr

The boolean condition (x > 0 in the example).

§then: Expr

The then branch (1 in the example).

§else_: Option<Expr>

An optional else branch (Some(2)in the example).

§

App

Function application.

§Example:

f(x, y)

Fields

§head: Expr

The head of the function application (or, which function do we apply?).

§args: Vec<Expr>

The arguments applied to the function.

§generic_args: Vec<GenericValue>

The generic arguments applied to the function.

§bounds_impls: Vec<ImplExpr>

If the function requires generic bounds to be called, bounds_impls is a vector of impl. expressions for those bounds.

§trait_: Option<(ImplExpr, Vec<GenericValue>)>

If we apply an associated function, contains the impl. expr used.

§

Literal(Literal)

A literal value.

§Example:

42, "hello"

§

Array(Vec<Expr>)

An array literal.

§Example:

[1, 2, 3]

§

Construct

A constructor application

§Example:

MyEnum::MyVariant { x : 1, ...base }

Fields

§constructor: GlobalId

The identifier of the constructor we are building (MyEnum::MyVariant in the example).

§is_record: bool

Are we constructing a record? E.g. a struct or a variant with named fields. (true in the example)

§is_struct: bool

Is this a struct? Neaning, not a variant from an enum. (false in the example)

§fields: Vec<(GlobalId, Expr)>

A list of fields ([(x, 1)] in the example).

§base: Option<Expr>

The base expression, if any. (Some(base) in the example)

§

Match

A `match`` expression.

§Example:

match x {
    pat1 => expr1,
    pat2 => expr2,
}

Fields

§scrutinee: Expr

The expression on which we are matching. (x in the example)

§arms: Vec<Arm>

The arms of the match. (pat1 => expr1 and pat2 => expr2 in the example)

§

Borrow

A reference expression.

§Examples:

  • &xmutable: false
  • &mut xmutable: true

Fields

§mutable: bool

Is the borrow mutable?

§inner: Expr

The expression we are borrowing

§

AddressOf

Raw borrow

§Example:

*const u8

Fields

§mutable: bool

Is the raw pointer mutable?

§inner: Expr

The expression on which we take a pointer

§

Let

A let expression used in expressions.

§Example:

let x = 1; x + 1

Fields

§lhs: Pat

The left-hand side of the let expression. (x in the example)

§rhs: Expr

The right-hand side of the let expression. (1 in the example)

§body: Expr

The body of the let. (x + 1 in the example)

§

GlobalId(GlobalId)

A global identifier.

§Example:

std::mem::drop

§

LocalId(LocalId)

A local variable.

§Example:

x

§

Ascription

Type ascription

Fields

§e: Expr

The expression being ascribed.

§ty: Ty

The type

§

Assign

Variable mutation

§Example:

x = 1

Fields

§lhs: Lhs

the left-hand side (place) of the assign

§value: Expr

The value we are assigning

§

Loop

Loop

§Example:

'label: loop { body }

Fields

§body: Expr

The body of the loop.

§kind: Box<LoopKind>

The kind of loop (e.g. while, loop, for…).

§state: Option<LoopState>

An optional loop state, that makes explicit the state mutated by the loop.

§control_flow: Option<ControlFlowKind>

What kind of control flow is performed by this loop?

§label: Option<Symbol>

Optional loop label.

§

Break

The break exppression, that breaks out of a loop.

§Example:

break 'label 3

Fields

§value: Expr

The value we break with. By default, this is ().

§Example:
loop { break 3; } + 3
§label: Option<Symbol>

What loop shall we break? By default, the parent enclosing loop.

§state: Option<Expr>

When a loop has a state (see ExprKind::Loop::state), this field state is Some(_). This carries the updated state for the loop.

§

Return

Return from a function.

§Example:

return 1

Fields

§value: Expr

The expression we return (1 in the example).

§

Continue

Continue (go to next loop iteration)

§Example:

continue 'label

Fields

§label: Option<Symbol>

The loop we continue.

§state: Option<Expr>

When a loop has a state (see ExprKind::Loop::state), this field state is Some(_). This carries the updated state for the loop.

§

Closure

Closure (anonymous function)

§Example:

|x| x

Fields

§params: Vec<Pat>

The parameters of the closure

§body: Expr

The body of the closure

§captures: Vec<Expr>

The captured expressions

§

Block

Block of safe or unsafe expression

§Example:

unsafe { ... }

Fields

§body: Expr

The body of the block.

§safety_mode: SafetyKind

The safety of the block.

§

Quote

A quote is an inlined piece of backend code.

Fields

§contents: Quote

The contents of the quote.

§

Resugared(ResugaredExprKind)

A resugared expression. This variant is introduced before printing only. Phases must not produce this variant.

§

Error(ErrorNode)

Fallback constructor to carry errors.

Implementations§

Source§

impl ExprKind

Source

pub fn standalone_fn_app( head: impl Into<FnAppHead>, generic_args: Vec<GenericValue>, args: Vec<Expr>, output_type: Ty, span: Span, ) -> Self

Creates a App node for a standalone function.

Source

pub fn fn_app( head: impl Into<FnAppHead>, generic_args: Vec<GenericValue>, args: Vec<Expr>, output_type: Ty, bounds_impls: Vec<ImplExpr>, trait_: Option<(ImplExpr, Vec<GenericValue>)>, span: Span, ) -> Self

Creates a App node.

Source

pub fn tuple(components: Vec<Expr>) -> Self

Creates a tuple out of a vector of components.

Source

pub fn promote(self, ty: Ty, span: Span) -> Expr

Promote to an Expr

Source§

impl ExprKind

Source

pub fn into_expr(self, span: Span, ty: Ty, attributes: Vec<Attribute>) -> Expr

Convert to full Expr with type, span and attributes

Trait Implementations§

Source§

impl AnyFragment for ExprKind

Source§

fn type_id() -> FragmentTypeId

Get a type identifier for this fragment.
Source§

fn as_fragment<'a>(&'a self, type_id: FragmentTypeId) -> Option<FragmentRef<'a>>

Coerce as a fragment reference.
Source§

fn as_owned_fragment(&self, type_id: FragmentTypeId) -> Option<Fragment>

Coerce as an owned fragment.
Source§

impl AstVisitable for ExprKind

Source§

fn drive_map<V: AstVisitorMut>(&mut self, v: &mut V)

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

fn drive<V: AstVisitor>(&self, v: &mut V)

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

impl AstVisitable for ExprKind

Source§

fn drive<V: AstEarlyExitVisitor>(&self, v: &mut V) -> ControlFlow<V::Break>

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

fn drive_mut<V: AstEarlyExitVisitorMut>( &mut self, v: &mut V, ) -> ControlFlow<V::Break>

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

impl Clone for ExprKind

Source§

fn clone(&self) -> ExprKind

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for ExprKind

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for ExprKind

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<'s, V> Drive<'s, V> for ExprKind
where V: Visitor + Visit<'s, Expr> + Visit<'s, Option<Expr>> + Visit<'s, Vec<Expr>> + Visit<'s, Vec<GenericValue>> + Visit<'s, Vec<ImplExpr>> + Visit<'s, Option<(ImplExpr, Vec<GenericValue>)>> + Visit<'s, Literal> + Visit<'s, GlobalId> + Visit<'s, bool> + Visit<'s, Vec<(GlobalId, Expr)>> + Visit<'s, Vec<Arm>> + Visit<'s, Pat> + Visit<'s, LocalId> + Visit<'s, Ty> + Visit<'s, Lhs> + Visit<'s, Box<LoopKind>> + Visit<'s, Option<LoopState>> + Visit<'s, Option<ControlFlowKind>> + Visit<'s, Option<Symbol>> + Visit<'s, Vec<Pat>> + Visit<'s, SafetyKind> + Visit<'s, Quote> + Visit<'s, ResugaredExprKind> + Visit<'s, ErrorNode>,

Source§

fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>

Call v.visit() on the immediate contents of self.
Source§

impl<'s, V> DriveMut<'s, V> for ExprKind

Source§

fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>

Call v.visit() on the immediate contents of self.
Source§

impl Eq for ExprKind

Source§

impl<'lt> From<&'lt ExprKind> for FragmentRef<'lt>

Source§

fn from(fragment: &'lt ExprKind) -> Self

Converts to this type from the input type.
Source§

impl From<ExprKind> for Fragment

Source§

fn from(fragment: ExprKind) -> Self

Converts to this type from the input type.
Source§

impl From<ExprKind> for FnAppHead

Source§

fn from(value: ExprKind) -> Self

Converts to this type from the input type.
Source§

impl Hash for ExprKind

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl JsonSchema for ExprKind

Source§

fn schema_name() -> String

The name of the generated JSON Schema. Read more
Source§

fn schema_id() -> Cow<'static, str>

Returns a string that uniquely identifies the schema produced by this type. Read more
Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type. Read more
Source§

fn is_referenceable() -> bool

Whether JSON Schemas generated for this type should be re-used where possible using the $ref keyword. Read more
Source§

impl Ord for ExprKind

Source§

fn cmp(&self, other: &ExprKind) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for ExprKind

Source§

fn eq(&self, other: &ExprKind) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for ExprKind

Source§

fn partial_cmp(&self, other: &ExprKind) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Serialize for ExprKind

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for ExprKind

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> ExtensionPoint for T
where T: Debug + for<'a> Deserialize<'a> + Serialize + JsonSchema + Clone,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> IsBody for T
where T: Clone + 'static,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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 T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more