while でハングすることがあるNo.02614
三宅 さん 03/08/05 09:03
 
// while 内で ラベルに goto したとき、そのラベルが while ループ末尾の } の
直前にあると、while の条件が真になったときにマクロが終了せずハングする
// (Alt+Ctrl+Del すると、秀丸が応答なしになっている)
// ラベル行と } の行との間にダミーの文を入れるとハングしない
// (もっとも、continue 文のバグがフィックスされたので、通常はこんな使い方
はしなくてすむんだけど。)

#i = 1;
while (#i<=3) {
 message str(#i);
 #i = #i+1;
 goto while_end;
 message "after goto"; //これは表示されないはず(念のため)

while_end:
 #a = 1;     //ダミー行:この行をコメントにするとハングする
}
message "after while";  //これが表示されないでハングする
endmacro;

環境:Windows98, Ver.4.00β13(Ver.3.19 でも起こる)

[ ]
RE:02614 while でハングすることがあるNo.02627
ENCODINGSHIFTJIS さん 03/08/05 16:14
 
WindowsXP でも再現しました。
ラベルがアンカーするダミー文は
セミコロン1個 ではダメですが
 { }   ならOkでした。

[ ]
RE:02627 while でハングすることがあるNo.02631
秀まるお さん 03/08/05 17:11
 
 詳しい情報ありがとうございます。

 秀丸担当が都合により帰宅したので代わりに斉藤秀夫が調査しました。再現テ
ストなどしたら簡単に再現し、ソースコードをトレースなどしたら、バグの原因
も分かりました。{...}の部分をスキップする処理がバグってまして、「}」の直
前にラベルがあると全滅でした。

 さっそく修正させていただきます。

[ ]
RE:02631 while でハングすることがあるNo.02667
三宅 さん 03/08/06 23:39
 
> さっそく修正させていただきます。

 ありがとうございます。
 通常は continue 文を使えばよいことが多いでしょうけど、
2重ループを抜け出すことなどもあるかと思うので、安心できます。

[ ]
RE:02631 while でハングすることがあるNo.02818
三宅 さん 03/08/20 12:58
 
Windows98, Ver.4.00β14
報告が遅くなってすみません。
確認しました。ありがとうございました。

[ ]