From 20fea9f540b996bf0efa8ecaf390f12a3c7254c3 Mon Sep 17 00:00:00 2001 From: A404M Date: Tue, 25 Mar 2025 21:12:34 +0330 Subject: fix recursive call bug --- code/main.felan | 13 ++++++++++--- src/runner/runner.c | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/code/main.felan b/code/main.felan index a45778c..f1db641 100644 --- a/code/main.felan +++ b/code/main.felan @@ -1,9 +1,16 @@ main :: () -> void { - b :*u64 = null; - a := f(b = 4,2); - print_u64 a; + print_u64 fibo(10); }; f :: (a:u64,b:u64)->u64{ return b-a; }; + +fibo :: (a:u64)->u64{ + if a == 0 + return 1; + else if a == 1 + return 1; + else + return fibo(a-1)+fibo(a-2); +}; diff --git a/src/runner/runner.c b/src/runner/runner.c index d77e2b8..28270ea 100644 --- a/src/runner/runner.c +++ b/src/runner/runner.c @@ -77,7 +77,7 @@ void runnerVariableSetValue(RunnerVariablePages *pages, "Can't assign to const"); exit(1); } - for (size_t i = 0; i < pages->size; ++i) { + for (size_t i = pages->size - 1; i != (size_t)-1ULL; --i) { RunnerVariables *variables = pages->data[i]; for (size_t j = 0; j < variables->size; ++j) { RunnerVariable *var = variables->data[j]; @@ -100,7 +100,7 @@ AstTree *runnerVariableGetValue(RunnerVariablePages *pages, if (variable->isConst) { return variable->value; } - for (size_t i = 0; i < pages->size; ++i) { + for (size_t i = pages->size - 1; i != (size_t)-1ULL; --i) { RunnerVariables *variables = pages->data[i]; for (size_t j = 0; j < variables->size; ++j) { RunnerVariable *var = variables->data[j]; -- cgit v1.2.3