2017-01-04: デフォルト引数に型制約が適用されない問題を修正した
プログラミングに対するモチベーションが非常に低下している。
やったこと
デフォルト引数に型制約が適用されない問題を修正した
例えばこんなコードがあったとする。
def foo(x : String = 1)
end
foo
x : Stringになってるのにx = 1がデフォルト値になっている、見るからに変なコードなんだけど、現状のコンパイラはこれを通してしまう。というのも、デフォルト値に対する型制約は適用されないから。
ついでに言うとこういうコードも上手く動かない。
def foo(x : T.class = String) forall T
p {{ T }}
end
foo
型制約のチェックをする際に自由変数の値が設定されるようになってるので。
どうやって修正したかを簡単に説明すると、TypeRestrictionという疑似ノードを追加して、メソッドが実体化されるときに型制約を持つデフォルト引数があったら挿入するようにしている。