about summary refs log tree commit diff
path: root/src/bootstrap/codegen.src
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-06-03 22:53:03 +0200
committerBaitinq <[email protected]>2025-06-03 22:57:40 +0200
commit08abe6f88042d3f734453e47e4a410391fd4e9f9 (patch)
treef1f2f7fad6368eb26cde09ac5d712cf536fde28f /src/bootstrap/codegen.src
parentBootstrap: Parser: Add enough implementation to parse example -2 (diff)
downloadinterpreter-08abe6f88042d3f734453e47e4a410391fd4e9f9.tar.gz
interpreter-08abe6f88042d3f734453e47e4a410391fd4e9f9.tar.bz2
interpreter-08abe6f88042d3f734453e47e4a410391fd4e9f9.zip
Bootstrap: Codegen: Start implementation
Diffstat (limited to '')
-rw-r--r--src/bootstrap/codegen.src43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/bootstrap/codegen.src b/src/bootstrap/codegen.src
new file mode 100644
index 0000000..e4d3102
--- /dev/null
+++ b/src/bootstrap/codegen.src
@@ -0,0 +1,43 @@
+import "llvm.src";
+
+let codegen = struct {
+	llvm_module: *void,
+	llvm_context: *void,
+	builder: *void,
+};
+
+let codegen_init = (alloc: *arena) => *codegen {
+	LLVMInitializeX86TargetInfo();
+	LLVMInitializeX86TargetMC();
+	LLVMInitializeX86Target();
+	LLVMInitializeX86AsmPrinter();
+	LLVMInitializeX86AsmParser();
+
+	let module = LLVMModuleCreateWithName("module");
+        let context = LLVMGetGlobalContext();
+        let builder = LLVMCreateBuilder();
+	
+	let c = cast(*codegen, arena_alloc(alloc, sizeof(codegen)));
+	
+	(*c).llvm_module = module;
+	(*c).llvm_context = context;
+	(*c).builder = builder;
+
+	return c;
+};
+
+let codegen_generate = (c: *codegen) => i64 {
+	return 0;
+};
+
+let codegen_compile = (c: *codegen) => i64 {
+	LLVMDumpModule((*c).llvm_module);
+	return 0;
+};
+
+let codegen_deinit = (c: *codegen) => void {
+        LLVMDisposeModule((*c).llvm_module);
+        LLVMShutdown();
+        LLVMDisposeBuilder((*c).builder);
+	return;
+};