summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--code/main.felan13
-rw-r--r--src/runner/runner.c4
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];