use crate::syn::{op::*, span::*}; pub enum Expr { Base(BaseExpr), Bin(Box), Un(Box), } impl From for Expr { fn from(un: UnExpr) -> Self { Expr::Un(Box::new(un)) } } impl From for Expr { fn from(bin: BinExpr) -> Self { Expr::Bin(Box::new(bin)) } } impl From for Expr { fn from(base: BaseExpr) -> Self { Expr::Base(base) } } pub struct BinExpr { pub lhs: Expr, pub op: BinOp, pub rhs: Expr, } pub struct UnExpr { pub op: UnOp, pub expr: Expr, pub span: Span, } pub enum BaseExprKind { Ident, Num, Str, Sym, List(Vec), Object(Vec<(Expr, Expr)>), Tuple(Vec), } pub struct BaseExpr { pub kind: BaseExprKind, pub span: Span, }