その6

変数名、ラベルの扱い

Advシステムではいつ・どこでセーブされるか分かりません。
whileループの途中で割り込みが入って、そこでセーブされてもロード時にはメモリ内容が再現されなければなりません。
さらにパッチで変数を追加されても識別できるように、変数は名前ごと保存する必要があります。


while(true)
{
    if (++i<0) {
        !ここで割り込みが発生→セーブ

        ret = i;
        ...
    }
}

そのままだと 読み込みや参照に時間が掛かってしまうので、安全に名前を短縮したいです。
そこでハッシュを用います。
CRC32にでも変換してDWORD型に放り込みます。
1,073,741,824バイトの変数名であっても、コンパイル後には4バイトです。


実行時には変数名を全てテーブルで管理し、参照を1発でできるようにします。
スクリプトコード中の変数をインデックスに置換する感じです。
パッチ関係で頑張るならコンパイル時にこれしても良いんですが
その後のアフターケア(コードの逆コンパイルとか)を考えると面倒なので…。