diff --git a/reid/src/ast/mod.rs b/reid/src/ast/mod.rs index 1b15512..c72a15c 100644 --- a/reid/src/ast/mod.rs +++ b/reid/src/ast/mod.rs @@ -212,11 +212,11 @@ pub enum TopLevelStatement { #[derive(Debug)] pub struct BinopDefinition { - lhs: (String, Type), - op: BinaryOperator, - rhs: (String, Type), - return_ty: Type, - block: Block, + pub lhs: (String, Type), + pub op: BinaryOperator, + pub rhs: (String, Type), + pub return_ty: Type, + pub block: Block, } #[derive(Debug)] diff --git a/reid/src/ast/process.rs b/reid/src/ast/process.rs index e843c49..610dcc4 100644 --- a/reid/src/ast/process.rs +++ b/reid/src/ast/process.rs @@ -23,6 +23,7 @@ impl ast::Module { let mut imports = Vec::new(); let mut functions = Vec::new(); let mut typedefs = Vec::new(); + let mut binops = Vec::new(); use ast::TopLevelStatement::*; for stmt in &self.top_level_statements { @@ -97,13 +98,28 @@ impl ast::Module { }; typedefs.push(def); } - BinopDefinition(binop_definition) => todo!(), + BinopDefinition(ast::BinopDefinition { + lhs, + op, + rhs, + return_ty, + block, + }) => { + binops.push(mir::BinopDefinition { + lhs: (lhs.0.clone(), lhs.1 .0.into_mir(module_id)), + op: op.mir(), + rhs: (rhs.0.clone(), rhs.1 .0.into_mir(module_id)), + return_ty: return_ty.0.into_mir(module_id), + block: block.into_mir(module_id), + }); + } } } mir::Module { name: self.name.clone(), module_id: module_id, + binop_defs: binops, imports, functions, path: self.path.clone(), diff --git a/reid/src/mir/mod.rs b/reid/src/mir/mod.rs index f805f77..4cb3630 100644 --- a/reid/src/mir/mod.rs +++ b/reid/src/mir/mod.rs @@ -365,6 +365,15 @@ pub enum TypeDefinitionKind { Struct(StructType), } +#[derive(Debug)] +pub struct BinopDefinition { + pub lhs: (String, TypeKind), + pub op: BinaryOperator, + pub rhs: (String, TypeKind), + pub return_ty: TypeKind, + pub block: Block, +} + #[derive(Debug)] pub struct Module { pub name: String, @@ -372,6 +381,7 @@ pub struct Module { pub imports: Vec, pub functions: Vec, pub typedefs: Vec, + pub binop_defs: Vec, pub path: Option, pub tokens: Vec, pub is_main: bool,