気がついたらほぼ外に出ない三連休。行きたいところもないしねぇ。
プリプロセッサはだいたい出来てきたっぽい。
テストが適当なのでバグってそうではあるんだけどそれはあとでなんとかするとして、ぱっと見は動いてるようだ。
if条件式解析で関数形式のマクロもちゃんとパースできるようにしたんだけど、よく考えたら展開してからパースしないといけないんだったので無駄足だったわ。どうも難しく考えすぎちゃってるな。
トークン分割時にトークンの位置を記憶してないのでエラーのとき場所が出せなくてまずいね。これは対応予定なのでまあ大丈夫。
GLSLのプリプロセッサ命令にはどう考えてもプリプロセッサ命令じゃない物が入ってるのでこれの扱いに困る。
versionディレクティブはGLSLのバージョン指定だから後のパースとコンパイルに必要になるものだし、extensionディレクティブもOpenGL拡張を使うか使わないかの指定なのでやっぱりコンパイラに渡さないと…。
でもまあこいつらはpragmaディレクティブの一種と考えれば変なディレクティブという程でもないか*1。どちらにしろ扱いには困るんだが。
位置も気にするなら、これ自体をトークンとしてトークン列に残しとけばいいんだけど、位置は気にしないならpragma辺りは別に記録しておくこともできるな。でもCとかだとpragmaの位置は重要か。残しておこう。
*1 つかpragmaが既に変なディレクティブだな…
基本的にはバグ修正とのことだが、俺的にはそんなにピンとくるバグ修正は無さげ。
それより新機能で拡張メソッドが使えるようになってるみたい。
拡張メソッドはC#でオープンクラスもどきを実現するものだけど、今まではIronRubyから見るとただのクラスメソッドにしか見えなかった。thisの位置に自前でレシーバ渡すの。それが普通にインスタンスメソッド的に使えるようにできるってさ。WriteableBitmapExとか使おうとして悲しい思いをしたので細かいけど嬉しいね。
あとでかい変更としてライセンスがMs-PLからApacheライセンス2.0になってる。MLのアーカイブを見ると、Ms-PLよりもうちょいメジャーなライセンスの方が使いやすくね?という感じで変更されたらしい。内容はそれほど変わらないんだけどね。
あ、もう一個。最低でも.NET 3.5が必須になってる。なんでかは知らないが、まあ余程古いシステムじゃなきゃ問題無いでしょう。Monoでも動くしね。