about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-05-17 11:40:28 +0200
committerBaitinq <[email protected]>2025-05-17 11:40:28 +0200
commit9df061a08d0a031a6ba91b9b674c9b5758a6177e (patch)
tree4fb4c518d8a3c0a9440347d9bec22faef6342026
parentBootstrap: Tokenizer: Tokenize ints (diff)
downloadpry-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.src12
-rw-r--r--src/codegen.zig6
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| {