diff options
| author | Baitinq <[email protected]> | 2025-06-03 22:53:03 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-06-03 22:57:40 +0200 |
| commit | 08abe6f88042d3f734453e47e4a410391fd4e9f9 (patch) | |
| tree | f1f2f7fad6368eb26cde09ac5d712cf536fde28f /src/bootstrap/codegen.src | |
| parent | Bootstrap: Parser: Add enough implementation to parse example -2 (diff) | |
| download | pry-lang-08abe6f88042d3f734453e47e4a410391fd4e9f9.tar.gz pry-lang-08abe6f88042d3f734453e47e4a410391fd4e9f9.tar.bz2 pry-lang-08abe6f88042d3f734453e47e4a410391fd4e9f9.zip | |
Bootstrap: Codegen: Start implementation
Diffstat (limited to 'src/bootstrap/codegen.src')
| -rw-r--r-- | src/bootstrap/codegen.src | 43 |
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; +}; |