diff options
| author | Baitinq <[email protected]> | 2025-05-24 10:29:38 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-05-24 10:29:38 +0200 |
| commit | 10f5f234ce066f533bc7dfa96b4acbd342c359c4 (patch) | |
| tree | b3b4f2f934a4c00a5fd45f03c1bf04f7eb1d08cb | |
| parent | Codegen: Fix bug with typecheck of return of function params (diff) | |
| download | pry-lang-10f5f234ce066f533bc7dfa96b4acbd342c359c4.tar.gz pry-lang-10f5f234ce066f533bc7dfa96b4acbd342c359c4.tar.bz2 pry-lang-10f5f234ce066f533bc7dfa96b4acbd342c359c4.zip | |
Codegen: Fix bug with functions inside functions
| -rw-r--r-- | src/codegen.zig | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index e9eec9b..619e6db 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -545,11 +545,12 @@ 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 { + if (variable.node_type.TYPE != .FUNCTION_TYPE or variable.stack_level != 0) { + var param_type = try self.get_llvm_type(variable.node_type); + if (variable.node_type.TYPE == .FUNCTION_TYPE) { + param_type = llvm.LLVMPointerType(param_type.?, 0); + } param_value = llvm.LLVMBuildLoad2(self.builder, param_type, variable.value, ""); } |