From 7371673ab581f2ab4db313dadf21c661ce0b7d87 Mon Sep 17 00:00:00 2001 From: Baitinq Date: Thu, 5 Jun 2025 00:08:00 +0200 Subject: Bootstrap: Codegen: Continue implementation --- src/bootstrap/codegen.src | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'src/bootstrap/codegen.src') diff --git a/src/bootstrap/codegen.src b/src/bootstrap/codegen.src index 3a76c16..5a08369 100644 --- a/src/bootstrap/codegen.src +++ b/src/bootstrap/codegen.src @@ -28,7 +28,40 @@ let codegen_init = (alloc: *arena) => *codegen { return c; }; -let codegen_generate = (c: *codegen) => i64 { +let codegen_generate_assignment_statement = (c: *codegen, stmt: *NODE_ASSIGNMENT_STATEMENT_DATA) => i64 { + println("HOLA"); + return 0; +}; + +let codegen_generate_statement = (c: *codegen, statement: *Node) => i64 { + let stmt = *statement; + assert(stmt.type == NODE_ASSIGNMENT_STATEMENT); /* TODO: generate other node types */ + + let res = codegen_generate_assignment_statement(c, cast(*NODE_ASSIGNMENT_STATEMENT_DATA, stmt.data)); + if res != 0 { + return 1; + }; + println("STMT: %d", stmt.type); + return 0; +}; + +let codegen_generate = (c: *codegen, ast: *Node) => i64 { + assert((*ast).type == NODE_PROGRAM); + + let program = *cast(*NODE_PROGRAM_DATA, (*ast).data); + + let i = 0; + while i < program.statements_len { + let stmt = *(program.statements + cast(**Node, i)); + + let res = codegen_generate_statement(c, stmt); + if res != 0 { + return 1; + }; + + i = i + 1; + }; + return 0; }; -- cgit 1.4.1