Enum sway_core::language::parsed::ExpressionKind
source · pub enum ExpressionKind {
Show 26 variants
Error(Box<[Span]>),
Literal(Literal),
AmbiguousPathExpression(Box<AmbiguousPathExpression>),
FunctionApplication(Box<FunctionApplicationExpression>),
LazyOperator(LazyOperatorExpression),
Variable(Ident),
Tuple(Vec<Expression>),
TupleIndex(TupleIndexExpression),
Array(ArrayExpression),
Struct(Box<StructExpression>),
CodeBlock(CodeBlock),
If(IfExpression),
Match(MatchExpression),
Asm(Box<AsmExpression>),
MethodApplication(Box<MethodApplicationExpression>),
Subfield(SubfieldExpression),
DelineatedPath(Box<DelineatedPathExpression>),
AbiCast(Box<AbiCastExpression>),
ArrayIndex(ArrayIndexExpression),
StorageAccess(StorageAccessExpression),
IntrinsicFunction(IntrinsicFunctionExpression),
WhileLoop(WhileLoopExpression),
Break,
Continue,
Reassignment(ReassignmentExpression),
Return(Box<Expression>),
}
Variants§
Error(Box<[Span]>)
A malformed expression.
Used for parser recovery when we cannot form a more specific node.
The list of Span
s are for consumption by the LSP and are,
when joined, the same as that stored in expr.span
.
Literal(Literal)
AmbiguousPathExpression(Box<AmbiguousPathExpression>)
An ambiguous path where we don’t know until type checking whether this is a free function call or a UFCS (Rust term) style associated function call.
FunctionApplication(Box<FunctionApplicationExpression>)
LazyOperator(LazyOperatorExpression)
Variable(Ident)
Tuple(Vec<Expression>)
TupleIndex(TupleIndexExpression)
Array(ArrayExpression)
Struct(Box<StructExpression>)
CodeBlock(CodeBlock)
If(IfExpression)
Match(MatchExpression)
Asm(Box<AsmExpression>)
MethodApplication(Box<MethodApplicationExpression>)
Subfield(SubfieldExpression)
A subfield expression is anything of the form:
<ident>.<ident>
DelineatedPath(Box<DelineatedPathExpression>)
A delineated path is anything of the form:
<ident>::<ident>
Where there are n >= 2
idents.
These could be either enum variant constructions, or they could be
references to some sort of module in the module tree.
For example, a reference to a module:
std::ops::add
And, an enum declaration:
enum MyEnum {
Variant1,
Variant2
}
MyEnum::Variant1
AbiCast(Box<AbiCastExpression>)
A cast of a hash to an ABI for calling a contract.
ArrayIndex(ArrayIndexExpression)
StorageAccess(StorageAccessExpression)
IntrinsicFunction(IntrinsicFunctionExpression)
WhileLoop(WhileLoopExpression)
A control flow element which loops continually until some boolean expression evaluates as
false
.
Break
Continue
Reassignment(ReassignmentExpression)
Return(Box<Expression>)
Trait Implementations§
source§impl Clone for ExpressionKind
impl Clone for ExpressionKind
source§fn clone(&self) -> ExpressionKind
fn clone(&self) -> ExpressionKind
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl RefUnwindSafe for ExpressionKind
impl Send for ExpressionKind
impl Sync for ExpressionKind
impl Unpin for ExpressionKind
impl UnwindSafe for ExpressionKind
Blanket Implementations§
source§impl<T> AnyDebug for Twhere
T: Any + Debug,
impl<T> AnyDebug for Twhere T: Any + Debug,
source§fn as_any_ref(&self) -> &(dyn Any + 'static)
fn as_any_ref(&self) -> &(dyn Any + 'static)
Any
.§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.