1#[derive(Debug, Clone, PartialEq)]2pub enum FieldName {3 4 Fixed(String),5 6 Dyn(Box<Expr>),7}89#[derive(Debug, Clone, PartialEq)]10pub enum Visibility {11 12 Normal,13 14 Hidden,15 16 Unhide,17}1819#[derive(Debug, Clone, PartialEq)]20pub struct AssertStmt(pub Box<Expr>, pub Option<Box<Expr>>);2122#[derive(Debug, Clone, PartialEq)]23pub enum FieldMember {24 Value {25 name: FieldName,26 plus: bool,27 visibility: Visibility,28 value: Expr,29 },30 Function {31 name: FieldName,32 params: Params,33 visibility: Visibility,34 value: Expr,35 },36}3738#[derive(Debug, Clone, PartialEq)]39pub enum Member {40 Field(FieldMember),41 BindStmt(Bind),42 AssertStmt(AssertStmt),43}4445#[derive(Debug, Clone, PartialEq)]46pub enum UnaryOpType {47 Plus,48 Minus,49 BitNot,50 Not,51}5253#[derive(Debug, Clone, PartialEq)]54pub enum BinaryOpType {55 Mul,56 Div,57 Mod,5859 Add,60 Sub,6162 Lhs,63 Rhs,6465 Lt,66 Gt,67 Lte,68 Gte,6970 In,7172 Eq,73 Ne,7475 BitAnd,76 BitOr,77 And,78 Or,7980 BitXor,81}8283#[derive(Debug, Clone, PartialEq)]84pub enum Param {85 Positional(String),86 Named(String, Box<Expr>),87}8889#[derive(Debug, Clone, PartialEq)]90pub struct Params(pub Vec<Param>);9192#[derive(Debug, Clone, PartialEq)]93pub enum Arg {94 Positional(Box<Expr>),95 Named(String, Box<Expr>),96}9798#[derive(Debug, Clone, PartialEq)]99pub struct Args(pub Vec<Arg>);100101#[derive(Debug, Clone, PartialEq)]102pub enum Bind {103 Value(String, Box<Expr>),104 Function(String, Params, Box<Expr>),105}106107#[derive(Debug, Clone, PartialEq)]108pub struct IfSpec(pub Box<Expr>);109#[derive(Debug, Clone, PartialEq)]110pub struct ForSpec(pub String, pub Vec<IfSpec>);111112#[derive(Debug, Clone, PartialEq)]113pub enum CompSpec {114 IfSpec(IfSpec),115 ForSpec(ForSpec),116}117118#[derive(Debug, Clone, PartialEq)]119pub enum ObjBody {120 MemberList(Vec<Member>),121 ObjComp {122 pre_locals: Vec<Bind>,123 key: Box<Expr>,124 value: Box<Expr>,125 post_locals: Vec<Bind>,126 first: ForSpec,127 rest: Vec<CompSpec>,128 },129}130131#[derive(Debug, Clone, PartialEq)]132pub enum ValueType {133 Null,134 True,135 False,136}137138#[derive(Debug, Clone, PartialEq)]139pub enum LiteralType {140 This,141 Super,142 Dollar,143}144145146#[derive(Debug, Clone, PartialEq)]147pub enum Expr {148 Value(ValueType),149 150 Literal(LiteralType),151152 153 Str(String),154 155 Num(f64),156 157 Var(String),158159 160 Arr(Vec<Expr>),161 162 163 164 165 166 167 168 169 170 171 172 ArrComp(Box<Expr>, Vec<ForSpec>),173174 175 Obj(ObjBody),176 177 ObjExtend(Box<Expr>, ObjBody),178179 180 Parened(Box<Expr>),181182 Params(Params),183 Args(Args),184185 UnaryOp(UnaryOpType, Box<Expr>),186 BinaryOp(Box<Expr>, BinaryOpType, Box<Expr>),187 AssertExpr(AssertStmt, Box<Expr>),188 LocalExpr(Vec<Bind>, Box<Expr>),189190 Bind(Bind),191 Import(String),192 ImportStr(String),193 Error(Box<Expr>),194 Apply(Box<Expr>, Args),195 Select(Box<Expr>, String),196 Index(Box<Expr>, Box<Expr>),197 Slice {198 value: Box<Expr>,199 start: Option<Box<Expr>>,200 end: Option<Box<Expr>>,201 step: Option<Box<Expr>>,202 },203 Function(Params, Box<Expr>),204 IfElse {205 cond: IfSpec,206 cond_then: Box<Expr>,207 cond_else: Option<Box<Expr>>,208 },209 IfSpec(IfSpec),210 ForSpec(ForSpec),211}