about summary refs log tree commit diff
path: root/src/bootstrap/codegen.src
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap/codegen.src')
-rw-r--r--src/bootstrap/codegen.src35
1 files changed, 34 insertions, 1 deletions
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;
 };