エラー時の行数表示がおかしい

実際の4倍の行数で表示される。もちろん、なんの改造もしていないOpenHSP ver3.2beta1をコンパイルしたhspcmp.dllなんだけど。
後でHSP ver3.1とプリプロセス済みファイル、オブジェクトファイルを比較してみる。

スクリプト

#cmpopt ppout 1
mes __LINE__ : mes 1/0

OpenHSP ver3.2beta1

__LINE__ の表示

2

実行時のエラー表示
#Error 19 in line 8 (hoge.hsp)
-->0で除算しました
プリプロセス済みファイル
##0 "hspdef.as"






















































































































##0 "hoge.hsp"

mes@hsp 2 : mes@hsp 1/0
オブジェクトファイル
48 53 50 33 01 03 00 00 00 00 00 00 95 02 00 00
60 00 00 00 24 00 00 00 84 00 00 00 13 00 00 00
97 00 00 00 04 00 00 00 9b 00 00 00 fa 01 00 00
95 02 00 00 00 00 00 00 95 02 00 00 00 00 00 00
95 02 00 00 00 00 00 00 95 02 00 00 00 00 00 00
95 02 00 00 00 00 00 00 01 00 00 00 00 00 00 00
09 20 0f 00 04 00 02 00 09 20 0f 00 04 00 01 00
04 00 00 00 00 00 03 00 0f 20 11 00 0f 20 00 00
07 00 00 00 68 73 70 64 65 66 2e 61 73 00 68 6f
67 65 2e 68 73 70 00 0c 00 00 00 fe 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 fe 0a 00
00 00 00 00 00 00 00 00 00 00 00 0c 00 00 00 06
00 00 00 ff ff

HSP ver3.1

__LINE__ の表示

2

実行時のエラー表示
#Error 19 in line 2 (hoge.hsp)
-->0で除算しました
プリプロセス済みファイル
##0 "hspdef.as"






















































































































##0 "hoge.hsp"

mes@hsp 2 : mes@hsp 1/0
オブジェクトファイル
48 53 50 33 01 03 00 00 00 00 00 00 24 01 00 00
60 00 00 00 24 00 00 00 84 00 00 00 13 00 00 00
97 00 00 00 04 00 00 00 9b 00 00 00 89 00 00 00
24 01 00 00 00 00 00 00 24 01 00 00 00 00 00 00
24 01 00 00 00 00 00 00 24 01 00 00 00 00 00 00
24 01 00 00 00 00 00 00 01 00 00 00 00 00 00 00
09 20 0f 00 04 00 02 00 09 20 0f 00 04 00 01 00
04 00 00 00 00 00 03 00 0f 20 11 00 0f 20 00 00
07 00 00 00 68 73 70 64 65 66 2e 61 73 00 68 6f
67 65 2e 68 73 70 00 0c 00 00 00 fe 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 fe 0a 00 00 00 00 00 00
0c 06 ff ff



むう。
プリプロセス済みファイルに違いはなくて、オブジェクトファイルは明らかにサイズが違う。
Debug Infoのサイズが3.1のは137で、3.2beta1のは506ってかなり増えてる。

んー次はOpenHSP ver3.1も手元にあるのでこれでも同じことを試してみようかな。
それでも同じように行数表示がおかしくなるようだったら、自分の環境がおかしい可能性が濃厚になる。

OpenHSP ver3.1RC1で同様のテストを行ってみたところ、プリプロセス済みファイルもオブジェクトファイルもHSP ver3.1と同じ結果で、エラー時の行数表示も正しかった。
次はver3.2beta1とのソースの差分から原因を突き詰めていこうと思う。

その前にOpenHSP ver3.2beta1のランタイムでも同様の不具合があるか確かめるべきだった。オブジェクトファイルのフォーマットに3.1と互換性がないだけかもしれない。

OpenHSP ver3.2beta1のhsp3clやhsp3でも同様にエラー時の行数表示がおかしかった。やっぱり不具合か、自分の環境がおかしいか。他の人も同様の不具合が起きるのか誰か試してくれないかな。自分ひとりじゃ「不具合だ」って報告するにはあまり自信ない。

さて、OpenHSP ver3.1とOpenHSP ver3.2beta1のソースの差分から原因を突き詰めていく作業に入る。
やっぱり最初に疑うべきはDebug Infoに書き込む処理だと思う。

diffをとってそこからdi_bufを検索するとcodegen.cppの2482行目。

@@ -2483,7 +2482,7 @@
 	int ofs;
 	ofs=(int)( GetCS() - cg_lastcs );
 	if ( ofs <= 250 ) {
-		di_buf->Put( (unsigned char)ofs );
+		di_buf->Put( ofs );
 	} else {
 		di_buf->Put( (unsigned char)252 );
 		di_buf->Put( (unsigned char)(ofs) );

これっぽい感じがする。



さっそく該当箇所を di_buf->Put( (unsigned char)ofs ); に戻してみたところ、エラー行数表示がおかしくなる不具合が直りました。ふうう。さて、次は報告しないとね。

OpenHSPのTracにチケット登録すればいいのかな。

登録した。