//整数型
#define DEF_CHAR		0x0001
#define DEF_BYTE		0x0002
#define DEF_INTEGER		0x0003
#define DEF_WORD		0x0004
#define DEF_LONG		0x0005
#define DEF_DWORD		0x0006
#define DEF_INT64		0x0007
#define DEF_QWORD		0x0008

//実数型
#define DEF_SINGLE		0x0009
#define DEF_DOUBLE		0x000A

//文字列型
#define DEF_STRING		0x000B

//ポインタ型
#define DEF_PTR_VOID	0x000C
#define DEF_PTR_DOUBLE	0x000D
#define DEF_PTR_SINGLE	0x000E
#define DEF_PTR_QWORD	0x000F
#define DEF_PTR_DWORD	0x0010
#define DEF_PTR_WORD	0x0011
#define DEF_PTR_BYTE	0x0012
#define DEF_PTR_OBJECT	0x0013
#define DEF_PTR_PROC	0x0014

いきなりですが、上のコードはBasicCompiler.exeのコードの一部、内部で利用する型コードが定義されている部分です。

こうして見ると、基本型、文字列型、ポインタ型など、ABで扱うすべての型が揃っているように見えますが…

実は一つだけ足りない要素があるんです。そいつはズバリ、ポインタのポインタ!ポインタを良くわかっていない方はまたポインタかよぉ〜と言ってしまいそうですよね。ポインタがわかっているおいらもポインタのポインタをコンパイラがどのように扱うのかを考え出すとイヤになってしまいます。

ABはポインタのポインタを直接的に扱うことができません。例えば、下記のコードはエラーになります。

Dim ppRect As **RECT
〜
ppRect[0]->left=10

仕様上は何の問題もありませんが、コンパイラがオブジェクトポインタのポインタを参照しながら、同時にメンバにアクセスすることができていないんです。ちなみに、下のようにワンクッションおけば、問題ないっす。

Dim ppRect As **RECT
Dim pRect As *RECT
〜
pRect=ppRect[0]
pRect->left=10

こちらの事情ということになりますが、これを克服するためには書き換える部分が多数でてきて、がんばらねばなりません。

今考えている方法は、一番上に書いてある型コードの上位16ビットにポインタの階層番号を記すというものです。まぁ、いたって単純なわけで、すぐにでも実装にとりかかろうと思うのですが、何せ修正部分が30個所以上。バグがバグを引き寄せる可能性も大きいので慎重に修正をかけなければなりません。

今夜は軽井沢行きの支度とレンタカー借りがあるんで、開発は早々に切り上げて、ということなんで、また後日ってことですかね〜。Ver4.1β2を楽しみにされているユーザーの皆様、もうちょっとお待ちくださいm(__)m