関数間の型推論を作りました
関数の呼び出し情報を使って型推論をする機能を入れてみました。あまり、使いどころは無いような気がしますが(必要なら+ 0.0とか入れて型を指定すればいいから)、面白いかなと思います。
def fact(n) n end def llvmfib(n) fact(3.9) if n < 2 then 1 else llvmfib(n - 1) + llvmfib(n - 2) end end
例えば、こんな感じのプログラムでfactは型が不明ですが、llvmfibで3.9を引数で呼び出しているので、factはDouble -> Doubleと型推論できます。
define double @fact(double) { bb: %1 = alloca double ; <double*> [#uses=2] store double %0, double* %1 br label %bb1 bb1: ; preds = %bb %2 = load double* %1 ; <double> [#uses=1] ret double %2 }