pub enum BeamExpr {
Show 22 variants
LitInt(i64),
LitFloat(f64),
LitAtom(String),
LitString(String),
Nil,
Var(String),
Tuple(Vec<BeamExpr>),
Cons(Box<BeamExpr>, Box<BeamExpr>),
Map(Vec<(BeamExpr, BeamExpr)>),
MapUpdate(Box<BeamExpr>, Vec<(BeamExpr, BeamExpr)>),
Call {
module: Option<String>,
func: String,
args: Vec<BeamExpr>,
},
CallExt {
module: Box<BeamExpr>,
func: Box<BeamExpr>,
args: Vec<BeamExpr>,
},
Apply {
fun: Box<BeamExpr>,
args: Vec<BeamExpr>,
},
Case {
subject: Box<BeamExpr>,
clauses: Vec<BeamClause>,
},
Let {
var: String,
value: Box<BeamExpr>,
body: Box<BeamExpr>,
},
Letrec {
bindings: Vec<(String, Vec<String>, Box<BeamExpr>)>,
body: Box<BeamExpr>,
},
Fun {
params: Vec<String>,
body: Box<BeamExpr>,
arity: usize,
},
Primop {
name: String,
args: Vec<BeamExpr>,
},
Receive {
clauses: Vec<BeamClause>,
timeout: Option<Box<BeamExpr>>,
timeout_action: Option<Box<BeamExpr>>,
},
Try {
body: Box<BeamExpr>,
vars: Vec<String>,
handler: Box<BeamExpr>,
evars: Vec<String>,
catch_body: Box<BeamExpr>,
},
Seq(Box<BeamExpr>, Box<BeamExpr>),
Binary(Vec<BeamBitSegment>),
}Expand description
Core Erlang-style expression representation.
These map closely to Core Erlang (the intermediate language used by the Erlang compiler before generating BEAM bytecode).
Variants§
LitInt(i64)
Integer literal
LitFloat(f64)
Float literal
LitAtom(String)
Atom literal (e.g., ok, error, true, false)
LitString(String)
String (represented as binary or list of chars in BEAM)
Nil
Nil (empty list [])
Var(String)
Variable reference
Tuple(Vec<BeamExpr>)
Tuple constructor: {Elem1, Elem2, ...}
Cons(Box<BeamExpr>, Box<BeamExpr>)
List cons: [Head | Tail]
Map(Vec<(BeamExpr, BeamExpr)>)
Map literal: #{Key => Value, ...}
MapUpdate(Box<BeamExpr>, Vec<(BeamExpr, BeamExpr)>)
Map update: Map#{Key => Value}
Call
Local function call: Module:FuncName(Args...)
CallExt
Inter-module call: Module:Function(Args...)
Apply
Apply a fun value: Fun(Args...)
Case
Case expression for pattern matching
Let
Let binding: let Var = Expr in Body
Letrec
Letrec (mutually recursive functions)
Fun
Fun literal (lambda / closure)
Primop
Primitive operation (BIF — Built-In Function)
Receive
Receive block with optional timeout
Fields
clauses: Vec<BeamClause>Try
Try-catch block
Fields
Seq(Box<BeamExpr>, Box<BeamExpr>)
Sequence (do-notation style)
Binary(Vec<BeamBitSegment>)
Binary construction: <<Segment, ...>>