今日は朝から知人に指摘された仮想関数に関する機能を実装しているところです。内容は、クラス継承時に仮想関数をオーバーライドしたときのvtableの上書き動作です。

その前に、ABでは仮想関数を保持するクラスをNewしたときのコンパイラ動作が未完成のままになっています。まぁ、仮想関数なんてのは、COMインターフェイスくらいにしか使われないだろうと軽視していたのが悪いのですが、どうやらその他にも色々と便利な機能があるようで…。

とにかく、仮想関数周りのコンパイラ機能をしっかりとさせます。ABの仮想関数は、

Virtual Function 関数名(パラメータ) As 型

という1行のコードからなります。こいつは、仮想関数のプロトタイプ宣言になるので、Function 〜 End Function間の実装を記述することはできません。

プロトタイプ宣言にプラスする形で、実装を記述できる言語仕様へと拡張が必要です。また、Javaのように、メンバ関数がデフォルトで仮想関数になったほうが良い場合もありそうなので、クラス定義の際のオプション指定子を考えてみようかと思います。