今日は夕方から家業の配達の手伝いがあるので、それまでは開発を進めます。

まずは、問題にあがっているキャストの問題。すぐにキャスト可能な仕様に改良することはできないので、ことはじめとしてコンパイラの演算コード生成部をすべての型に対応させるところから始めます。今まではコード軽量のため、一定の型(Double/Single/Int64/QWord/DWord/Long)のみに制御を絞っていたのですが、今後はInteger/Word/Char/Byte及びその他ポインタ型の識別も可能にしていかなければなりません。

中核部分をいじるのは数ヶ月ぶりなので、ちょっと不安なんですよ(–;;;。コンパイラを製作したことがある方ならわかると思うのですが、コンパイラを記述しているプログラムコードっていうのは、対象となる言語仕様が複雑になればなるほど難解になっていくんです。ABは、仕様を追加しまくる方向できているので、例外事例にムリヤリ対処するためのコードが目立つんですよね(汗)。

まぁ、そういうこともありまして、マイペースに作業を進めているところです。お昼の段階で、演算コード抽出ルーチンで対応できる型を基本型すべてに拡張したところです。今後は型識別コードでは表現しきれない付加識別コードに対応させていきます。

型識別コードとは?

・Char/Byte/Integer/Word/Long/DWord/Int64/QWord/Single/Double

・文字列型

・オブジェクト型

・列挙型

・基本型のポインタ型

・オブジェクトポインタ型

・関数ポインタ型

これらの型を識別すめためのID番号。コンパイラ内部で使用されるため、一般のプログラマーは意識する必要はないっす。

付加識別コード

オブジェクト型、列挙型、オブジェクトポインタ型、関数ポインタ型など、1つの型識別コードだけでは表現できない識別情報を持ち合わせます。

例えば、オブジェクト型、オブジェクトポインタ型の付加識別コードには、クラスを指し示すID番号が振り分けられます。

この文章、読み返してみたら、暗号のようなものになっていますね。コンパイラを作る過程での悩みが相談できる人(かなり特殊なケース!?)ってのは幸せです。おいらはいつも一人ぼっちですから…。