diff --git a/hello b/hello new file mode 100755 index 0000000..4825f68 Binary files /dev/null and b/hello differ diff --git a/src/codegen.zig b/src/codegen.zig index 0466d58..38eafdd 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -236,11 +236,16 @@ pub const Codegen = struct { return switch (metadata.using) { .Function => blk: { var param = metadata.from_function.?.parameters.get(vari.lexeme).?.value; - // var llvm_func = self.llvm_table.get(self.current_function_name.?).?.value; - // break :blk llvm.LLVMGetParam(llvm_func, @intCast(c_uint, param.idx)); - std.debug.warn("fn param alloca {} {}\n", param.name, param.llvm_alloca); - break :blk param.llvm_alloca.?; + var buf = try self.allocator.alloc(u8, 512); + errdefer self.allocator.free(buf); + + var load_str = try std.fmt.bufPrint(buf, "{}_loaded", param.name); + + var load_cstr = try std.cstr.addNullByte(self.allocator, load_str); + errdefer self.allocator.free(load_cstr); + + break :blk llvm.LLVMBuildLoad(builder, param.llvm_alloca.?, load_cstr.ptr); }, .Scope => @panic("TODO local variables"), diff --git a/src/comp_ctx.zig b/src/comp_ctx.zig index a786770..afbe5e4 100644 --- a/src/comp_ctx.zig +++ b/src/comp_ctx.zig @@ -85,7 +85,7 @@ pub const Parameter = struct { llvm_alloca: llvm.LLVMValueRef = null, }; -pub const ParameterMap = std.StringHashMap(Parameter); +pub const ParameterMap = std.StringHashMap(*Parameter); // functions, for our purposes, other than symbols, have: // - a return type @@ -274,11 +274,14 @@ pub const CompilationContext = struct { var param_map = ParameterMap.init(self.allocator); for (decl.params.toSlice()) |param, idx| { - _ = try param_map.put(param.name.lexeme, Parameter{ + var param_sym = try self.allocator.create(Parameter); + + param_sym.* = Parameter{ .name = param.name.lexeme, .idx = idx, .typ = param_types.at(idx), - }); + }; + _ = try param_map.put(param.name.lexeme, param_sym); } const lex = decl.func_name.lexeme;