pub enum Expr {
Show 38 variants
IntLiteral(i64),
FloatLiteral(f64),
StringLiteral(String),
CharLiteral(char),
BoolLiteral(bool),
Ident(String),
BinaryOp {
left: Box<Expr>,
op: BinOp,
right: Box<Expr>,
},
UnaryOp {
op: UnaryOp,
expr: Box<Expr>,
},
Assign {
target: Box<Expr>,
value: Box<Expr>,
},
CompoundAssign {
target: Box<Expr>,
op: BinOp,
value: Box<Expr>,
},
Let {
name: String,
mutable: bool,
type_ann: Option<Type>,
value: Option<Box<Expr>>,
},
Block(Vec<Expr>),
If {
condition: Box<Expr>,
then_block: Box<Expr>,
else_block: Option<Box<Expr>>,
},
While {
condition: Box<Expr>,
body: Box<Expr>,
},
Loop {
body: Box<Expr>,
},
For {
var: String,
iterator: Box<Expr>,
body: Box<Expr>,
},
Range {
start: Option<Box<Expr>>,
end: Option<Box<Expr>>,
inclusive: bool,
},
Break(Option<Box<Expr>>),
Continue,
Return(Option<Box<Expr>>),
FnDef {
name: String,
params: Vec<(String, Type)>,
return_type: Option<Type>,
body: Box<Expr>,
},
FnCall {
name: String,
args: Vec<Expr>,
},
MethodCall {
object: Box<Expr>,
method: String,
args: Vec<Expr>,
},
MacroCall {
name: String,
args: Vec<Expr>,
},
ArrayLiteral(Vec<Expr>),
ArrayRepeat {
value: Box<Expr>,
count: Box<Expr>,
},
TupleLiteral(Vec<Expr>),
Index {
object: Box<Expr>,
index: Box<Expr>,
},
FieldAccess {
object: Box<Expr>,
field: String,
},
StructDef {
name: String,
fields: Vec<(String, Type)>,
},
StructInit {
name: String,
fields: Vec<(String, Expr)>,
},
Match {
expr: Box<Expr>,
arms: Vec<MatchArm>,
},
TypeCast {
expr: Box<Expr>,
target_type: Type,
},
Closure {
params: Vec<(String, Option<Type>)>,
body: Box<Expr>,
},
Ref {
expr: Box<Expr>,
mutable: bool,
},
Deref(Box<Expr>),
VecMacro(Vec<Expr>),
Unit,
}Expand description
An expression or statement in the AST.
In VirtualRust, everything is an expression — even let bindings,
if/while/for control flow, and function definitions.
Variants§
IntLiteral(i64)
FloatLiteral(f64)
StringLiteral(String)
CharLiteral(char)
BoolLiteral(bool)
Ident(String)
BinaryOp
UnaryOp
Assign
Simple assignment (x = expr).
CompoundAssign
Compound assignment (x += expr, x -= expr, etc.).
Let
Variable declaration (let [mut] name [: type] = expr).
Block(Vec<Expr>)
A { ... } block of statements.
If
if condition { ... } [else { ... }]
While
Loop
For
Range
Break(Option<Box<Expr>>)
Continue
Return(Option<Box<Expr>>)
FnDef
Named function definition.
FnCall
MethodCall
MacroCall
ArrayLiteral(Vec<Expr>)
[a, b, c]
ArrayRepeat
[expr; count]
TupleLiteral(Vec<Expr>)
Index
FieldAccess
StructDef
struct Name { ... }
StructInit
Match
match expr { arms... }
TypeCast
expr as Type
Closure
|params| body
Ref
&expr or &mut expr
Deref(Box<Expr>)
*expr
VecMacro(Vec<Expr>)
vec![...]
Unit
The unit value ().
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Expr
impl RefUnwindSafe for Expr
impl Send for Expr
impl Sync for Expr
impl Unpin for Expr
impl UnsafeUnpin for Expr
impl UnwindSafe for Expr
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