HSPのバグらしきものをまた見つけてしまった…

HSPのバグらしきものをまた見つけてしまった…

onerror gosub *a
repeat 10
mesbox aa ;エラー (わざと)
loop
stop
*a
dialog "エラー:"+err
return

repeat~loop間でエラーをおこし、 onerror、gosubでサブルーチンに飛び、そこにdialogがあると、returnしたときに、「repeatがないのにloopが出ましたよエラー」が出てしまいます。これはバグでしょうか?


「HSPのバグらしきものをまた見つけてしまった…」への5件のフィードバック

  1. return命令でlooplevがリセットされてますね。

    でもonclickとかのreturn命令ではlooplevがリセットされずに
    動作するのであえてonerrorだけに生じるのでたぶん仕様。

    たぶん、onerrorでキャッチした後は終了させろということでしょうね。無限ループとかによるエラーをonerrorで検出した後、
    returnするとまた無限ループになるからあえてそうしたんでしょう。

  2. そうなんですか。これもバグではないんですか…。

  3. 私の環境だと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

  4. あああああああああああああああああああああああああああああああ
    あああああああああああああああああああああああああああああああ
    ああああああああああああああああああああああああああああああ。
    根本的なミスをしていました。すいません。もうしわけありません。
    ごめんなさい。

コメントは受け付けていません。