diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-03-25 21:12:34 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-03-25 21:12:34 +0330 |
commit | 20fea9f540b996bf0efa8ecaf390f12a3c7254c3 (patch) | |
tree | 5deee720e0853877a270b816ea23b2fae759f9c6 | |
parent | 3bd7d3498f12cfb8dbdf5fff7c0bc981bf8085e2 (diff) |
fix recursive call bug
-rw-r--r-- | code/main.felan | 13 | ||||
-rw-r--r-- | 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]; |