about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-07-13 10:09:52 +0200
committerBaitinq <[email protected]>2025-07-13 10:09:52 +0200
commitef80f466d3c968c121a49f020ff12de7ce2b3257 (patch)
tree7a4cc70425a1b10f706b2f409fffbcd2a579c65d /src
parentBoostrap: Fuction def call and multiplicative expr (diff)
downloadpry-lang-ef80f466d3c968c121a49f020ff12de7ce2b3257.tar.gz
pry-lang-ef80f466d3c968c121a49f020ff12de7ce2b3257.tar.bz2
pry-lang-ef80f466d3c968c121a49f020ff12de7ce2b3257.zip
Boostrap: Fuction recursive functions
Diffstat (limited to 'src')
-rw-r--r--src/bootstrap/codegen.pry11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/bootstrap/codegen.pry b/src/bootstrap/codegen.pry
index 934b532..4a3786a 100644
--- a/src/bootstrap/codegen.pry
+++ b/src/bootstrap/codegen.pry
@@ -417,7 +417,16 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: *
 		(*node_type).type = NODE_TYPE_FUNCTION_TYPE;
 		(*node_type).data = cast(*void, d);
 
-                /* TODO: Needed for recursive functions */
+                /* Needed for recursive functions */
+		if name != cast(*i8, null) {
+			let v = Variable{};
+			v.value = function;
+			v.type = cast(LLVMTypeRef, null);
+			v.stack_level = cast(*i64, null);
+			v.node = expression;
+			v.node_type = node_type;
+			environment_add_variable((*c).environment, name, codegen_create_variable(c, v));
+		};
 
 		let params = cast(*LLVMValueRef, arena_alloc((*c).arena, sizeof(LLVMValueRef) * function_definition.parameters_len));
 		LLVMGetParams(function, params);