関数ポインタ実装

こんな感じのサンプルコードがコンパイル出来るようになった。dictionary passingへの布石。

plus: (a, b) { return a + b; };
f: () { return plus; };

export
main: () {
    g : f();

    syscall(1, g(1, 2));
};

ちゃんと型安全です。

syscall(1, g(1));

とか書くと

compile main.rl
> parsing...
> typing...
ERROR: type mismatch (int,int) <-> (int)

こんな感じでエラーに。エラー行の管理を早い段階で放棄したのはちょっと後悔。