pub enum Node {
Show 55 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>,
},
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>,
},
FnDecl {
name: String,
params: Vec<TypedParam>,
return_type: Option<TypeExpr>,
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>,
},
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>),
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
IfElse
ForIn
MatchExpr
WhileLoop
Retry
ReturnStmt
TryCatch
Fields
FnDecl
Fields
§
params: Vec<TypedParam>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
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>)
Block(Vec<SNode>)
Closure
Trait Implementations§
impl StructuralPartialEq for Node
Auto Trait Implementations§
impl Freeze for Node
impl RefUnwindSafe for Node
impl Send for Node
impl Sync for Node
impl Unpin for Node
impl UnsafeUnpin for Node
impl UnwindSafe for Node
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
Mutably borrows from an owned value. Read more