いつのバージョンからか、イベントによるgoto割り込みでsublev、looplevがクリアされるようになりました。
以下のようなコードでネスト異常が発生しないようになりました。
ただ、関数呼び出し中のスタック領域に乗るlocal変数が正しく解放されていないようです。
#module #deffunc MemoryLeakTest local mem sdim mem,1024*1024*8 // 8MB wait 1 return #global RemainCount = 0 button "Restart",*main *main color 255,255,255: boxf : color : pos 0,32 : mes strf("RestartedCount : %d",RemainCount) RemainCount ++ repeat MemoryLeakTest loop
(この例だとボタンを押すたびにタスクマネージャーからメモリが8MB+αずつ増えていくのが確認できるかと思います。)
これだと、ただ単にメモリを食うだけで実行時間が長くならない限りあまり問題ないのですが、
module型変数のmodtermが呼ばれないということを確認しました。
未確認ですが、com型もdelcomされない気がします。
特にonerrorを使用する際はサブルーチンスタック解放が発生するので注意です。
local変数を持つ関数内でwaitも危険ですね。goto割り込みを使う方は特に。
…OpenHSPのどのあたりにその処理があるのか特定するのは私には少々荷が重いです。