codegen: add emitting of const declarations
This commit is contained in:
parent
cb8908dc80
commit
04c624e210
1 changed files with 19 additions and 0 deletions
|
@ -316,6 +316,25 @@ pub const Codegen = struct {
|
||||||
// NOTE: enums don't have specific llvm ir code generated for them
|
// NOTE: enums don't have specific llvm ir code generated for them
|
||||||
.Enum => {},
|
.Enum => {},
|
||||||
|
|
||||||
|
.ConstDecl => |constdecls| {
|
||||||
|
for (constdecls.toSlice()) |constdecl| {
|
||||||
|
const name = constdecl.name.lexeme;
|
||||||
|
|
||||||
|
var const_type = self.ctx.symbol_table.get(name).?.value;
|
||||||
|
var const_llvm_type = try self.typeToLLVM(const_type.Const);
|
||||||
|
|
||||||
|
const const_name = try std.cstr.addNullByte(self.allocator, name);
|
||||||
|
errdefer self.allocator.free(const_name);
|
||||||
|
|
||||||
|
var global = llvm.LLVMAddGlobal(mod, const_llvm_type, const_name.ptr);
|
||||||
|
|
||||||
|
var builder = llvm.LLVMCreateBuilder();
|
||||||
|
var expr_llvm_val = try self.emitExpr(builder, constdecl.expr);
|
||||||
|
|
||||||
|
llvm.LLVMSetInitializer(global, expr_llvm_val);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
else => {
|
else => {
|
||||||
std.debug.warn("TODO handle node type {}\n", @tagName(node.*));
|
std.debug.warn("TODO handle node type {}\n", @tagName(node.*));
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue