複数ファイルからのコンパイル

複数ファイルからのコンパイルができた
ファイルを1つのNamespaceにする感じ

今んとこuseすると相手Namespaceの関数だけを取り込むような動きをする
エントリーポイントになるNamespaceしか実行しないから
use先のファイルに単に「print(1)」と書いたら動かない、つか単純に動かれても困るしどうしたものか・・・
とりあえずほっておこう

f:id:zenu:20160317234225p:plain

useすると勝手にファイルを読みに行く
ちゃんとパーサがリエントラントになってるみたい、結構えらいな

しかしパーサジェネレータがVS2005が出たころに書いたものなので、とにかくソースがきちゃない
error終端記号やyyerrorに相当するものに対応してないって問題以外は特に困ってないけど
パーサジェネレータを書き直したい病が出てきた



そういえば配列とnullを作るのを忘れていた!!
nullはどうしようかなぁ
「var x = null」は型解決できないのでエラーにせざるをえない
「var x: Hoge = null」はそもそも型不一致でエラー
「var x: Hoge? = null」はHoge?型のnullにすればいい
「sub f() Hoge? : return(null)」ならHoge?型のnullにすればいい、つかreturn関数が「sub return(x: Hoge?)」になるからいいのかな?
こういうやつはinferの前に型解決できそう

「var x: @T = null」はinferの時にしか型解決できないから
いっそinferでまとめてやっちゃうのがお得かな??