pub enum Node {
Show 59 variants
Pipeline {
name: String,
params: Vec<String>,
body: Vec<SNode>,
extends: Option<String>,
},
LetBinding {
pattern: BindingPattern,
type_ann: Option<TypeExpr>,
value: Box<SNode>,
},
VarBinding {
pattern: BindingPattern,
type_ann: Option<TypeExpr>,
value: Box<SNode>,
},
OverrideDecl {
name: String,
params: Vec<String>,
body: Vec<SNode>,
},
ImportDecl {
path: String,
},
SelectiveImport {
names: Vec<String>,
path: String,
},
EnumDecl {
name: String,
variants: Vec<EnumVariant>,
},
StructDecl {
name: String,
fields: Vec<StructField>,
},
InterfaceDecl {
name: String,
methods: Vec<InterfaceMethod>,
},
ImplBlock {
type_name: String,
methods: Vec<SNode>,
},
IfElse {
condition: Box<SNode>,
then_body: Vec<SNode>,
else_body: Option<Vec<SNode>>,
},
ForIn {
pattern: BindingPattern,
iterable: Box<SNode>,
body: Vec<SNode>,
},
MatchExpr {
value: Box<SNode>,
arms: Vec<MatchArm>,
},
WhileLoop {
condition: Box<SNode>,
body: Vec<SNode>,
},
Retry {
count: Box<SNode>,
body: Vec<SNode>,
},
ReturnStmt {
value: Option<Box<SNode>>,
},
TryCatch {
body: Vec<SNode>,
error_var: Option<String>,
error_type: Option<TypeExpr>,
catch_body: Vec<SNode>,
finally_body: Option<Vec<SNode>>,
},
FnDecl {
name: String,
type_params: Vec<TypeParam>,
params: Vec<TypedParam>,
return_type: Option<TypeExpr>,
where_clauses: Vec<WhereClause>,
body: Vec<SNode>,
is_pub: bool,
},
TypeDecl {
name: String,
type_expr: TypeExpr,
},
SpawnExpr {
body: Vec<SNode>,
},
DurationLiteral(u64),
RangeExpr {
start: Box<SNode>,
end: Box<SNode>,
inclusive: bool,
},
GuardStmt {
condition: Box<SNode>,
else_body: Vec<SNode>,
},
AskExpr {
fields: Vec<DictEntry>,
},
DeadlineBlock {
duration: Box<SNode>,
body: Vec<SNode>,
},
YieldExpr {
value: Option<Box<SNode>>,
},
MutexBlock {
body: Vec<SNode>,
},
BreakStmt,
ContinueStmt,
Parallel {
count: Box<SNode>,
variable: Option<String>,
body: Vec<SNode>,
},
ParallelMap {
list: Box<SNode>,
variable: String,
body: Vec<SNode>,
},
SelectExpr {
cases: Vec<SelectCase>,
timeout: Option<(Box<SNode>, Vec<SNode>)>,
default_body: Option<Vec<SNode>>,
},
FunctionCall {
name: String,
args: Vec<SNode>,
},
MethodCall {
object: Box<SNode>,
method: String,
args: Vec<SNode>,
},
OptionalMethodCall {
object: Box<SNode>,
method: String,
args: Vec<SNode>,
},
PropertyAccess {
object: Box<SNode>,
property: String,
},
OptionalPropertyAccess {
object: Box<SNode>,
property: String,
},
SubscriptAccess {
object: Box<SNode>,
index: Box<SNode>,
},
SliceAccess {
object: Box<SNode>,
start: Option<Box<SNode>>,
end: Option<Box<SNode>>,
},
BinaryOp {
op: String,
left: Box<SNode>,
right: Box<SNode>,
},
UnaryOp {
op: String,
operand: Box<SNode>,
},
Ternary {
condition: Box<SNode>,
true_expr: Box<SNode>,
false_expr: Box<SNode>,
},
Assignment {
target: Box<SNode>,
value: Box<SNode>,
op: Option<String>,
},
ThrowStmt {
value: Box<SNode>,
},
EnumConstruct {
enum_name: String,
variant: String,
args: Vec<SNode>,
},
StructConstruct {
struct_name: String,
fields: Vec<DictEntry>,
},
InterpolatedString(Vec<StringSegment>),
StringLiteral(String),
IntLiteral(i64),
FloatLiteral(f64),
BoolLiteral(bool),
NilLiteral,
Identifier(String),
ListLiteral(Vec<SNode>),
DictLiteral(Vec<DictEntry>),
Spread(Box<SNode>),
TryOperator {
operand: Box<SNode>,
},
Block(Vec<SNode>),
Closure {
params: Vec<TypedParam>,
body: Vec<SNode>,
},
}Expand description
AST nodes for the Harn language.
Variants§
Pipeline
LetBinding
VarBinding
OverrideDecl
ImportDecl
SelectiveImport
Selective import: import { foo, bar } from “module”
EnumDecl
StructDecl
InterfaceDecl
ImplBlock
Impl block: impl TypeName { fn method(self, …) { … } … }
IfElse
ForIn
MatchExpr
WhileLoop
Retry
ReturnStmt
TryCatch
Fields
FnDecl
TypeDecl
SpawnExpr
DurationLiteral(u64)
Duration literal: 500ms, 5s, 30m, 2h
RangeExpr
Range expression: start upto end (exclusive) or start thru end (inclusive)
GuardStmt
Guard clause: guard condition else { body }
AskExpr
Ask expression: ask { system: “…”, user: “…”, … }
DeadlineBlock
Deadline block: deadline DURATION { body }
YieldExpr
Yield expression: yields control to host, optionally with a value.
MutexBlock
Mutex block: mutual exclusion for concurrent access.
BreakStmt
Break out of a loop.
ContinueStmt
Continue to next loop iteration.
Parallel
ParallelMap
SelectExpr
Fields
cases: Vec<SelectCase>FunctionCall
MethodCall
OptionalMethodCall
Optional method call: obj?.method(args) — returns nil if obj is nil.
PropertyAccess
OptionalPropertyAccess
Optional chaining: obj?.property — returns nil if obj is nil.
SubscriptAccess
SliceAccess
BinaryOp
UnaryOp
Ternary
Assignment
ThrowStmt
EnumConstruct
Enum variant construction: EnumName.Variant(args)
StructConstruct
Struct construction: StructName { field: value, … }
InterpolatedString(Vec<StringSegment>)
StringLiteral(String)
IntLiteral(i64)
FloatLiteral(f64)
BoolLiteral(bool)
NilLiteral
Identifier(String)
ListLiteral(Vec<SNode>)
DictLiteral(Vec<DictEntry>)
Spread(Box<SNode>)
Spread expression ...expr inside list/dict literals.
TryOperator
Try operator: expr? — unwraps Result.Ok or propagates Result.Err.