diff options
| author | Baitinq <[email protected]> | 2025-07-13 10:09:52 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-07-13 10:09:52 +0200 |
| commit | ef80f466d3c968c121a49f020ff12de7ce2b3257 (patch) | |
| tree | 7a4cc70425a1b10f706b2f409fffbcd2a579c65d | |
| parent | Boostrap: Fuction def call and multiplicative expr (diff) | |
| download | pry-lang-ef80f466d3c968c121a49f020ff12de7ce2b3257.tar.gz pry-lang-ef80f466d3c968c121a49f020ff12de7ce2b3257.tar.bz2 pry-lang-ef80f466d3c968c121a49f020ff12de7ce2b3257.zip | |
Boostrap: Fuction recursive functions
| -rw-r--r-- | src/bootstrap/codegen.pry | 11 |
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); |