Functions are working, tests incomplete

This required a massive cross-cutting rework to the scope system,
multiple subtle bugfixes and relearning of the parser internals, but it
does appear that functions are working correctly.

A few caveats: for now, parameters are always constant, regardless of
type, return values can't be specified, and some script tests have been
written.

Most importantly, a key feature is working: closures.
This commit is contained in:
2026-04-12 11:47:26 +10:00
parent b0d9c15d33
commit c0c03a4110
18 changed files with 158 additions and 92 deletions

View File

@@ -0,0 +1,22 @@
//closures
fn makeCounter() {
var counter: int = 0;
fn increment() {
return ++counter;
}
return increment;
}
var tally = makeCounter();
while (true) {
var result = tally();
print result;
if (result >= 10) {
break;
}
}

View File

@@ -0,0 +1,20 @@
fn fib(n) {
if (n < 2) return n;
return fib(n-1) + fib(n-2);
}
assert fib(1) == 1;
assert fib(2) == 1;
assert fib(3) == 2;
assert fib(4) == 3;
assert fib(5) == 5;
assert fib(6) == 8;
assert fib(7) == 13;
assert fib(8) == 21;
assert fib(9) == 34;
assert fib(10) == 55;
assert fib(11) == 89;
assert fib(12) == 144;
print "Fibonacci passed";