HSPのバグらしきものをまた見つけてしまった…
HSPのバグらしきものをまた見つけてしまった…
onerror gosub *a
repeat 10
mesbox aa ;エラー (わざと)
loop
stop
*a
dialog "エラー:"+err
return
repeat~loop間でエラーをおこし、 onerror、gosubでサブルーチンに飛び、そこにdialogがあると、returnしたときに、「repeatがないのにloopが出ましたよエラー」が出てしまいます。これはバグでしょうか?
return命令でlooplevがリセットされてますね。
でもonclickとかのreturn命令ではlooplevがリセットされずに
動作するのであえてonerrorだけに生じるのでたぶん仕様。
たぶん、onerrorでキャッチした後は終了させろということでしょうね。無限ループとかによるエラーをonerrorで検出した後、
returnするとまた無限ループになるからあえてそうしたんでしょう。
そうなんですか。これもバグではないんですか…。
あれ?でもdialogがないといけるんですけど…。
私の環境だとdialogの有無にかかわらず、2回*aが呼ばれてますよ。
そしてdialognの有無にかかわらずloop以降のスクリプトが実行されます。
ちなみにHSP3.22+Windows 7 32bit-HomePremiumです。
; トレースしやすいように以下のように改変
onerror gosub *a
repeat 10
mesbox aa ;エラー (わざと)
mes "B"
loop
mes "C"
stop
*a
;dialog "エラー:"+err
mes "A:"+err
return
;実行結果
; dialog有り
; (ダイアログの呼び出し後)A:6
; B
; (ダイアログの呼び出し後)A:11
; C
; dialog無し
; A:6
; B
; A:11
; C
あああああああああああああああああああああああああああああああ
あああああああああああああああああああああああああああああああ
ああああああああああああああああああああああああああああああ。
根本的なミスをしていました。すいません。もうしわけありません。
ごめんなさい。