use crate::syn::Spanned;
pub type SpBody = Spanned
;
pub type Body = Vec;
#[derive(Debug, Clone)]
pub enum Stmt {
Assign(SpAssignLhs, SpExpr),
Expr(SpExpr),
If {
if_true: SpCondBody,
elseif: Vec,
else_body: Option,
},
Def {
name: String,
params: Vec,
body: Vec,
},
Import {
target: String,
from: Option,
},
}
pub type SpAssignLhs = Spanned;
#[derive(Debug, Clone)]
pub enum AssignLhs {
/// A simple assignment.
///
/// `x = foo`
Name(String),
/// A more complex assignment.
///
/// `x().bar = foo`
Complex(SpExpr, String),
}
pub type SpStmt = Spanned;
#[derive(Debug, Clone)]
pub struct CondBody {
pub cond: SpExpr,
pub body: SpBody,
}
pub type SpCondBody = Spanned;
#[derive(Debug, Clone)]
pub struct Param {
pub name: String,
pub ty: Option,
}
pub type SpParam = Spanned;
#[derive(Debug, Clone)]
pub enum Expr {
Call(Box, Vec),
Get(Box, String),
Atom(SpAtom),
}
pub type SpExpr = Spanned;
#[derive(Debug, Clone)]
pub enum Atom {
Int(i64),
Float(f64),
Str(String),
Sym(String),
Name(String),
}
pub type SpAtom = Spanned;