// Generated by scripts/generate_ast.py from Endor.asdl. Do not edit. use super::Spanned; use crate::Span; pub const AST_SCHEMA_ID: &str = "urn:endor:ast:sha256:21b0349ac295d9bc8cedcad8f07d8e2d45cf220e19e7c2fad10269555fcfd71a"; #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct AstDocument { pub schema: String, pub root: AstRoot, } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(tag = "kind", content = "data", deny_unknown_fields)] pub enum AstRoot { Module(Program), Expression(Expr), Interactive(InteractiveInput), } impl Spanned for AstRoot { fn span(&self) -> Span { match self { Self::Module(node) => node.span(), Self::Expression(node) => node.span(), Self::Interactive(node) => node.span(), } } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Name { pub text: String, pub span: Span, } impl Spanned for Name { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Program { pub declarations: Vec, pub span: Span, } impl Spanned for Program { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Decl { pub kind: DeclKind, pub span: Span, } impl Spanned for Decl { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(tag = "kind", content = "data", deny_unknown_fields)] pub enum DeclKind { Function(Function), Class(Class), } impl Spanned for DeclKind { fn span(&self) -> Span { match self { Self::Function(node) => node.span(), Self::Class(node) => node.span(), } } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Class { pub name: Name, pub base: Option, pub fields: Vec, pub methods: Vec, pub span: Span, } impl Spanned for Class { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Function { pub name: Name, pub parameters: Vec, pub return_type: Name, pub body: Block, pub span: Span, } impl Spanned for Function { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Parameter { pub name: Name, pub type_name: Name, pub span: Span, } impl Spanned for Parameter { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Block { pub statements: Vec, pub span: Span, } impl Spanned for Block { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Stmt { pub kind: StmtKind, pub span: Span, } impl Spanned for Stmt { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(tag = "kind", content = "data", deny_unknown_fields)] pub enum StmtKind { Binding(Binding), Assignment(Assignment), MemberAssignment(MemberAssignment), If(IfStatement), While(WhileStatement), Return(ReturnStatement), Expression(Expr), Declaration(Decl), } impl Spanned for StmtKind { fn span(&self) -> Span { match self { Self::Binding(node) => node.span(), Self::Assignment(node) => node.span(), Self::MemberAssignment(node) => node.span(), Self::If(node) => node.span(), Self::While(node) => node.span(), Self::Return(node) => node.span(), Self::Expression(node) => node.span(), Self::Declaration(node) => node.span(), } } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Binding { pub name: Name, pub value: Expr, pub span: Span, } impl Spanned for Binding { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Assignment { pub name: Name, pub value: Expr, pub span: Span, } impl Spanned for Assignment { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct MemberAssignment { pub object: Expr, pub name: Name, pub value: Expr, pub span: Span, } impl Spanned for MemberAssignment { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct IfStatement { pub condition: Expr, pub body: Block, pub otherwise: Option, pub span: Span, } impl Spanned for IfStatement { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct WhileStatement { pub condition: Expr, pub body: Block, pub span: Span, } impl Spanned for WhileStatement { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct ReturnStatement { pub value: Option, pub span: Span, } impl Spanned for ReturnStatement { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct InteractiveInput { pub statements: Vec, pub span: Span, } impl Spanned for InteractiveInput { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] pub struct Expr { pub kind: ExprKind, pub span: Span, } impl Spanned for Expr { fn span(&self) -> Span { self.span } } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(tag = "kind", content = "data", deny_unknown_fields)] pub enum ExprKind { Name(String), Number(String), String(String), Symbol(Name), Await(Box), Unary { operation: UnaryOp, operand: Box, }, Binary { operation: BinaryOp, left: Box, right: Box, }, Member { object: Box, name: Name, }, Call { callee: Box, arguments: Vec, }, } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, Copy)] pub enum UnaryOp { Negate, } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, Copy)] pub enum BinaryOp { Add, Subtract, Multiply, Divide, Equal, NotEqual, Less, LessEqual, Greater, GreaterEqual, }