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.
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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