diff options
| -rw-r--r-- | examples/11.src | 12 | ||||
| -rw-r--r-- | src/codegen.zig | 6 |
2 files changed, 10 insertions, 8 deletions
diff --git a/examples/11.src b/examples/11.src index 1c45861..bd92f26 100644 --- a/examples/11.src +++ b/examples/11.src @@ -1,16 +1,16 @@ extern printf = (*i64, varargs) => i64; +let id = (a: i64) => i64 { + printf("%d\n", a); + printf("%d\n", 12); + return a; +}; + let main = () => i64 { let y = (f: (i64) => i64, x: i64) => i64 { return f(x); }; - let id = (a: i64) => i64 { - printf("%d\n", a); - printf("%d\n", 12); - return a; - }; - return y(id, 2); }; diff --git a/src/codegen.zig b/src/codegen.zig index 1d2e877..d126cde 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -495,12 +495,14 @@ pub const CodeGen = struct { .IDENTIFIER => |i| { const variable = self.environment.get_variable(i.name).?; var param_type = try self.get_llvm_type(variable.node_type); + var param_value = variable.value; if (variable.node_type.TYPE == .FUNCTION_TYPE) { param_type = llvm.LLVMPointerType(param_type.?, 0); + } else { + param_value = llvm.LLVMBuildLoad2(self.builder, param_type, variable.value, ""); } - const loaded = llvm.LLVMBuildLoad2(self.builder, param_type, variable.value, ""); - return self.generate_literal(loaded, name, expression, variable.node_type); + return self.generate_literal(param_value, name, expression, variable.node_type); }, }, .ADDITIVE_EXPRESSION => |exp| { |