pub enum Expr {
Ident(String, Span),
IntLit(u64, Span),
FloatLit(f64, Span),
StringLit(String, Span),
ArrayLit(Vec<Expr>, Span),
Call(CallExpr),
BinOp(Box<Expr>, BinOpKind, Box<Expr>),
UnaryNeg(Box<Expr>, Span),
UnaryBitNot(Box<Expr>, Span),
FieldAccess {
source: String,
field: String,
span: Span,
},
Cast(Box<Expr>, PortType, Span),
For(Box<ForSource>),
}Expand description
An expression (right-hand side of a binding).
Variants§
Ident(String, Span)
A bare identifier referencing a wire or init binding: cycle, lut
IntLit(u64, Span)
An integer literal: 1000
FloatLit(f64, Span)
A float literal: 72.0
StringLit(String, Span)
A string literal (may contain {name} interpolation): "hello {name}"
ArrayLit(Vec<Expr>, Span)
An array literal: [60.0, 20.0, 15.0]
Call(CallExpr)
A function call: hash(cycle), dist_normal(mean: 72.0, stddev: 5.0)
BinOp(Box<Expr>, BinOpKind, Box<Expr>)
A binary arithmetic operation: a + b, x * 0.25.
Desugared by the compiler into the equivalent function call.
UnaryNeg(Box<Expr>, Span)
Unary negation: -x.
Desugared to f64_sub(0.0, x).
UnaryBitNot(Box<Expr>, Span)
Unary bitwise NOT: !x.
Desugared to u64_not(x).
FieldAccess
Source field projection: base.ordinal, base.vector.
Resolved by the compiler to a node that reads from the source item.
Fields
Cast(Box<Expr>, PortType, Span)
<expr> as <type> — SRD-84 Part 1b type-coercion cast. An
optional, alignment-only type-fusion infill: a no-op when the
inner expression’s type already matches the target, otherwise
the compiler inserts the SRD-79 fusion adapter (or errors if no
valid fusion exists). The cast’s type is its target.
For(Box<ForSource>)
for <comprehension> in expression position — a comprehension
producer (SRD 113 §3.1). Binds a Streamer wire.