pub enum Expression {
Show 30 variants
StringLiteral(String),
NumberLiteral(f64),
BoolLiteral(bool),
PropertyReference(PropertyReference),
FunctionParameterReference {
index: usize,
},
StoreLocalVariable {
name: String,
value: Box<Expression>,
},
ReadLocalVariable {
name: String,
ty: Type,
},
StructFieldAccess {
base: Box<Expression>,
name: String,
},
ArrayIndex {
array: Box<Expression>,
index: Box<Expression>,
},
Cast {
from: Box<Expression>,
to: Type,
},
CodeBlock(Vec<Expression>),
BuiltinFunctionCall {
function: BuiltinFunction,
arguments: Vec<Expression>,
},
CallBackCall {
callback: PropertyReference,
arguments: Vec<Expression>,
},
ExtraBuiltinFunctionCall {
return_ty: Type,
function: String,
arguments: Vec<Expression>,
},
PropertyAssignment {
property: PropertyReference,
value: Box<Expression>,
},
ModelDataAssignment {
level: usize,
value: Box<Expression>,
},
ArrayIndexAssignment {
array: Box<Expression>,
index: Box<Expression>,
value: Box<Expression>,
},
BinaryExpression {
lhs: Box<Expression>,
rhs: Box<Expression>,
op: char,
},
UnaryOp {
sub: Box<Expression>,
op: char,
},
ImageReference {
resource_ref: ImageReference,
},
Condition {
condition: Box<Expression>,
true_expr: Box<Expression>,
false_expr: Box<Expression>,
},
Array {
element_ty: Type,
values: Vec<Expression>,
as_model: bool,
},
Struct {
ty: Type,
values: HashMap<String, Expression>,
},
EasingCurve(EasingCurve),
LinearGradient {
angle: Box<Expression>,
stops: Vec<(Expression, Expression)>,
},
EnumerationValue(EnumerationValue),
ReturnStatement(Option<Box<Expression>>),
LayoutCacheAccess {
layout_cache_prop: PropertyReference,
index: usize,
repeater_index: Option<Box<Expression>>,
},
BoxLayoutFunction {
cells_variable: String,
repeater_indices: Option<String>,
elements: Vec<Either<Expression, usize>>,
orientation: Orientation,
sub_expression: Box<Expression>,
},
ComputeDialogLayoutCells {
cells_variable: String,
roles: Box<Expression>,
unsorted_cells: Box<Expression>,
},
}
Variants§
StringLiteral(String)
A string literal. The .0 is the content of the string, without the quotes
NumberLiteral(f64)
Number
BoolLiteral(bool)
Bool
PropertyReference(PropertyReference)
Reference to a property (which can also be a callback) or an element (property name is empty then).
FunctionParameterReference
Reference the parameter at the given index of the current function.
StoreLocalVariable
Should be directly within a CodeBlock expression, and store the value of the expression in a local variable
ReadLocalVariable
a reference to the local variable with the given name. The type system should ensure that a variable has been stored with this name and this type before in one of the statement of an enclosing codeblock
StructFieldAccess
Access to a field of the given name within a struct.
ArrayIndex
Access to a index within an array.
Cast
Cast an expression to the given type
CodeBlock(Vec<Expression>)
a code block with different expression
BuiltinFunctionCall
A function call
CallBackCall
ExtraBuiltinFunctionCall
A BuiltinFunctionCall, but the function is not yet in the BuiltinFunction
enum
TODO: merge in BuiltinFunctionCall
PropertyAssignment
An assignment of a value to a property
ModelDataAssignment
an assignment of a value to the model data
ArrayIndexAssignment
An assignement done with the foo[idx] = ...
BinaryExpression
UnaryOp
ImageReference
Fields
resource_ref: ImageReference
Condition
Array
Fields
values: Vec<Expression>
Struct
EasingCurve(EasingCurve)
LinearGradient
Fields
angle: Box<Expression>
stops: Vec<(Expression, Expression)>
First expression in the tuple is a color, second expression is the stop position
EnumerationValue(EnumerationValue)
ReturnStatement(Option<Box<Expression>>)
LayoutCacheAccess
Fields
layout_cache_prop: PropertyReference
repeater_index: Option<Box<Expression>>
When set, this is the index within a repeater, and the index is then the location of another offset.
So this looks like layout_cache_prop[layout_cache_prop[index] + repeater_index]
BoxLayoutFunction
Will call the sub_expression, with the cell variable set to the array the array of BoxLayoutCellData form the elements
Fields
cells_variable: String
The local variable (as read with Self::ReadLocalVariable
) that contains the sell
elements: Vec<Either<Expression, usize>>
Either an expression of type BoxLayoutCellData, or an index to the repeater
orientation: Orientation
sub_expression: Box<Expression>
ComputeDialogLayoutCells
Implementations§
Source§impl Expression
impl Expression
pub fn default_value_for_type(ty: &Type) -> Option<Self>
pub fn ty(&self, ctx: &dyn TypeResolutionContext) -> Type
Sourcepub fn visit_recursive(&self, visitor: &mut dyn FnMut(&Self))
pub fn visit_recursive(&self, visitor: &mut dyn FnMut(&Self))
Visit itself and each sub expression recursively
Trait Implementations§
Source§impl Clone for Expression
impl Clone for Expression
Source§fn clone(&self) -> Expression
fn clone(&self) -> Expression
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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