diff options
| author | Baitinq <[email protected]> | 2025-05-17 11:40:28 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-05-17 11:40:28 +0200 |
| commit | 9df061a08d0a031a6ba91b9b674c9b5758a6177e (patch) | |
| tree | 4fb4c518d8a3c0a9440347d9bec22faef6342026 | |
| parent | Bootstrap: Tokenizer: Tokenize ints (diff) | |
| download | pry-lang-9df061a08d0a031a6ba91b9b674c9b5758a6177e.tar.gz pry-lang-9df061a08d0a031a6ba91b9b674c9b5758a6177e.tar.bz2 pry-lang-9df061a08d0a031a6ba91b9b674c9b5758a6177e.zip | |
Codegen: Fix bug with global functions as params
| -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| { |