Enum garden_lang_parser::ast::Expression_
source · pub enum Expression_ {
Show 22 variants
Match(Box<Expression>, Vec<(Pattern, Box<Expression>)>),
If(Box<Expression>, Block, Option<Block>),
While(Box<Expression>, Block),
ForIn(Symbol, Box<Expression>, Block),
Break,
Continue,
Assign(Symbol, Box<Expression>),
Let(Symbol, Option<TypeHint>, Box<Expression>),
Return(Option<Box<Expression>>),
IntLiteral(i64),
StringLiteral(String),
ListLiteral(Vec<Expression>),
TupleLiteral(Vec<Expression>),
StructLiteral(TypeSymbol, Vec<(Symbol, Expression)>),
BinaryOperator(Box<Expression>, BinaryOperatorKind, Box<Expression>),
Variable(Symbol),
Call(Box<Expression>, ParenthesizedArguments),
MethodCall(Box<Expression>, Symbol, ParenthesizedArguments),
DotAccess(Box<Expression>, Symbol),
FunLiteral(FunInfo),
Block(Block),
Invalid,
}Variants§
Match(Box<Expression>, Vec<(Pattern, Box<Expression>)>)
match x {
None => { get_value() }
Some(y) => y + 1,
_ => error("yikes"),
}
If(Box<Expression>, Block, Option<Block>)
if x { y }
if x { y } else { z }
While(Box<Expression>, Block)
while x { y z }
ForIn(Symbol, Box<Expression>, Block)
for x in y { z }
Break
break
Continue
continue
Assign(Symbol, Box<Expression>)
x = y
Let(Symbol, Option<TypeHint>, Box<Expression>)
let x = y
let x: T = y
Return(Option<Box<Expression>>)
return x
return // equivalent to `return Unit`
IntLiteral(i64)
123
StringLiteral(String)
"foo"
ListLiteral(Vec<Expression>)
[x, y]
TupleLiteral(Vec<Expression>)
()
(x,)
(x, y)
StructLiteral(TypeSymbol, Vec<(Symbol, Expression)>)
Foo { x: 1, y: bar() }
Field values are executed in the order they occur in source code, so we want an ordered data type here.
BinaryOperator(Box<Expression>, BinaryOperatorKind, Box<Expression>)
x + y
x < y
x && y
Variable(Symbol)
x
Call(Box<Expression>, ParenthesizedArguments)
x()
MethodCall(Box<Expression>, Symbol, ParenthesizedArguments)
foo.bar(x, y)
DotAccess(Box<Expression>, Symbol)
foo.bar
FunLiteral(FunInfo)
fun(x, y) { x + y }
Block(Block)
{ x y }
Invalid
We had a parse error in this position, so there’s no expression.
Trait Implementations§
source§impl Clone for Expression_
impl Clone for Expression_
source§fn clone(&self) -> Expression_
fn clone(&self) -> Expression_
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moresource§impl Debug for Expression_
impl Debug for Expression_
source§impl PartialEq for Expression_
impl PartialEq for Expression_
impl Eq for Expression_
impl StructuralPartialEq for Expression_
Auto Trait Implementations§
impl Freeze for Expression_
impl RefUnwindSafe for Expression_
impl Send for Expression_
impl Sync for Expression_
impl Unpin for Expression_
impl UnwindSafe for Expression_
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit)