Derive more traits for ast
This commit is contained in:
parent
8bfd99fc20
commit
ae2a0122d8
|
@ -3,12 +3,12 @@
|
||||||
|
|
||||||
use super::lexer::Token;
|
use super::lexer::Token;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub struct Ast<'a> {
|
pub struct Ast<'a> {
|
||||||
pub defs: Vec<Definition<'a>>,
|
pub defs: Vec<Definition<'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub enum Definition<'a> {
|
pub enum Definition<'a> {
|
||||||
Struct {
|
Struct {
|
||||||
name: &'a str,
|
name: &'a str,
|
||||||
|
@ -29,38 +29,38 @@ pub enum Definition<'a> {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub struct FnImpl<'a> {
|
pub struct FnImpl<'a> {
|
||||||
pub def: FnDef<'a>,
|
pub def: FnDef<'a>,
|
||||||
pub body: BranchBody<'a>,
|
pub body: BranchBody<'a>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub struct FnDef<'a> {
|
pub struct FnDef<'a> {
|
||||||
pub mutable: bool,
|
pub mutable: bool,
|
||||||
pub name: &'a str,
|
pub name: &'a str,
|
||||||
pub signature: FnSig<'a>,
|
pub signature: FnSig<'a>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||||
pub struct StructMember<'a> {
|
pub struct StructMember<'a> {
|
||||||
pub type_name: &'a str,
|
pub type_name: &'a str,
|
||||||
pub name: &'a str,
|
pub name: &'a str,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub struct FnSig<'a> {
|
pub struct FnSig<'a> {
|
||||||
pub args: Vec<FnArg<'a>>,
|
pub args: Vec<FnArg<'a>>,
|
||||||
pub return_type: Option<&'a str>,
|
pub return_type: Option<&'a str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||||
pub struct FnArg<'a> {
|
pub struct FnArg<'a> {
|
||||||
pub type_name: &'a str,
|
pub type_name: &'a str,
|
||||||
pub name: Option<&'a str>,
|
pub name: Option<&'a str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub struct BranchBody<'a> {
|
pub struct BranchBody<'a> {
|
||||||
pub statements: Vec<Statement<'a>>,
|
pub statements: Vec<Statement<'a>>,
|
||||||
pub tail_expr: Option<Box<Expr<'a>>>,
|
pub tail_expr: Option<Box<Expr<'a>>>,
|
||||||
|
@ -68,7 +68,7 @@ pub struct BranchBody<'a> {
|
||||||
|
|
||||||
type ExprPair<'a> = Box<(Expr<'a>, Expr<'a>)>;
|
type ExprPair<'a> = Box<(Expr<'a>, Expr<'a>)>;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub enum Expr<'a> {
|
pub enum Expr<'a> {
|
||||||
BinaryOp(BinaryOp, ExprPair<'a>),
|
BinaryOp(BinaryOp, ExprPair<'a>),
|
||||||
UnaryOp(UnaryOp, Box<Expr<'a>>),
|
UnaryOp(UnaryOp, Box<Expr<'a>>),
|
||||||
|
@ -81,7 +81,7 @@ pub enum Expr<'a> {
|
||||||
If(IfExpr<'a>),
|
If(IfExpr<'a>),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||||
pub enum BinaryOp {
|
pub enum BinaryOp {
|
||||||
Add,
|
Add,
|
||||||
Sub,
|
Sub,
|
||||||
|
@ -127,7 +127,7 @@ impl BinaryOp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||||
pub enum UnaryOp {
|
pub enum UnaryOp {
|
||||||
BoolNot,
|
BoolNot,
|
||||||
BitNot,
|
BitNot,
|
||||||
|
@ -147,7 +147,7 @@ impl UnaryOp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||||
pub enum Literal<'a> {
|
pub enum Literal<'a> {
|
||||||
BinaryInteger(&'a str),
|
BinaryInteger(&'a str),
|
||||||
OctalInteger(&'a str),
|
OctalInteger(&'a str),
|
||||||
|
@ -158,7 +158,7 @@ pub enum Literal<'a> {
|
||||||
Boolean(bool),
|
Boolean(bool),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub enum Statement<'a> {
|
pub enum Statement<'a> {
|
||||||
Expr(Expr<'a>),
|
Expr(Expr<'a>),
|
||||||
If(IfStmt<'a>),
|
If(IfStmt<'a>),
|
||||||
|
@ -173,14 +173,14 @@ pub enum Statement<'a> {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub struct IfExpr<'a> {
|
pub struct IfExpr<'a> {
|
||||||
pub test_expr: Box<Expr<'a>>,
|
pub test_expr: Box<Expr<'a>>,
|
||||||
pub then_body: BranchBody<'a>,
|
pub then_body: BranchBody<'a>,
|
||||||
pub else_body: BranchBody<'a>,
|
pub else_body: BranchBody<'a>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
pub struct IfStmt<'a> {
|
pub struct IfStmt<'a> {
|
||||||
pub test_expr: Expr<'a>,
|
pub test_expr: Expr<'a>,
|
||||||
pub then_body: BranchBody<'a>,
|
pub then_body: BranchBody<'a>,
|
||||||
|
|
Loading…
Reference in New Issue