mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
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:
@@ -1,15 +1,12 @@
|
||||
//BUG: Not yet functional
|
||||
//tentatively functional
|
||||
|
||||
//example of the fibonacci sequence
|
||||
fn fib(n: int) {
|
||||
//fibonacci sequence
|
||||
fn fib(n) {
|
||||
if (n < 2) return n;
|
||||
return fib(n-1) + fib(n-2);
|
||||
}
|
||||
|
||||
//TODO: type coercion syntax hasn't been decided on yet, but it will be needed
|
||||
for (var i = 1; i <= 10; i++) {
|
||||
print i .. ":" .. fib(i);
|
||||
}
|
||||
print fib(12);
|
||||
|
||||
//Note to my future self: yes, the base case in 'fib()' is 'n < 2', stop second guessing yourself!
|
||||
//Note to my past self: don't tell me what to do!
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
//BUG: Not yet functional
|
||||
|
||||
//find the leap years
|
||||
fn isLeapYear(n: int) {
|
||||
if (n % 400 == 0) return true;
|
||||
if (n % 100 == 0) return false;
|
||||
return n % 4 == 0;
|
||||
}
|
||||
print isLeapYear(1999);
|
||||
print isLeapYear(2000);
|
||||
print isLeapYear(2004);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
//BUG: functions aren't working yet
|
||||
fn makeCounter() {
|
||||
var counter: int = 0;
|
||||
|
||||
@@ -14,7 +13,9 @@ var tally = makeCounter();
|
||||
while (true) {
|
||||
var result = tally();
|
||||
|
||||
if (result >= 10_000_000) {
|
||||
print result;
|
||||
|
||||
if (result >= 10) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user