「aaa」
と表示されます。
1行目if(0){ 2行目 mes "aaa" 3行目 stop 4行目 stop 5行目 stop ⋮ ⋮ 10922行目 stop 10923行目 stop 10924行目 stop 10925行目 } 10926行目 mes "abc"
一方でstop命令を一つコメントアウトした以下のコードを実行すると、
「abc」
と正しく表示されます。
1行目if(0){ 2行目 mes "aaa" 3行目 // stop 4行目 stop 5行目 stop ⋮ ⋮ 10922行目 stop 10923行目 stop 10924行目 stop 10925行目 } 10926行目 mes "abc"
これはHSPの中間コードにおいて、if命令は偽のときのコードセグメントのジャンプ先を16bitの相対オフセット値で保持しているのですが、
ifの中に多量の命令があると、16bitでは収まらずオーバーフローしてしまい本来は10926行目にジャンプしなければならないところを2行目にジャンプしてしまいます。
現実的にifの中にこれほどの命令を記述することはないでしょうから、実用上の問題はないとは思いますが、興味深い現象でしたので報告いたします。
検証用コードはこちらです。
https://github.com/takazin11de/if_test/blob/main/it_test.hsp