.NETのメソッドが呼べた

.NETのメソッドが呼べるようになった
作っている言語にメソッドなんて概念をつけていないので「型.メソッド(引数)」の並びを「メソッド(型, 引数)」に変えて関数コールするようにした
幸いCILではどっちでも一緒だしね

f:id:zenu:20160518232334p:plain

ちょっと面倒なのが名前空間
「DateTime.Parse(a)」は「DateTime::Parse(a)」と「Parse(DateTime, a)」の2種類の解釈ができるから「DateTime」が型なのか名前空間なのか判定しなきゃいけない
でもメソッドなんてないので、便宜上↓みたいなイメージに展開している

namespace System
    struct DateTime
        var x = xxxxx

    namespace DateTime
        sub Parse(s : String) DateTime
            xxxxx

        sub ToString(self : DateTime, s : String) String
            xxxxx

これじゃDateTimeが型なのか名前空間なのか型付けしてみるまでわかんない・・・
自分のソース部分だけなら型と同名の名前空間なんかコンパイルエラーにしちゃえばいいけど.NETアセンブリ読み込みのところだけは、まぁできるようにしておく
おかげでシンタックスシュガーの変換が型のinfer中に行うはめになって、どんより