hra1129 / msx_basic_compiler

MSX-BASICコンパイラ
MIT License
22 stars 2 forks source link

文字結合で生成した文字列に対してMID$の文字置換が行われない #8

Closed NasubiKT closed 7 months ago

NasubiKT commented 7 months ago

以下のサンプルコードを実行した場合、MID$での文字置換が行われません。

10 SCREEN1:DEFINTA-Z
20 FOR I=0 TO 9:A$=A$+"a":NEXT I
30 MID$(A$,3,1)="B"
40 PRINT"["+A$+"]"

実行結果

[aaaaaaaaaa]
Ok

20行目を以下のように修正すると、文字が置換されます。

10 SCREEN1:DEFINTA-Z
20 A$="aaaaaaaaaa"
30 MID$(A$,3,1)="B"
40 PRINT"["+A$+"]"

実行結果

[aaBaaaaaaa]
Ok
hra1129 commented 7 months ago

原因は分かりましたので、明日対応します。

hra1129 commented 7 months ago

文字列操作を行うと、HEAP上の文字列と配列変数は再配置される場合があるので、格納先が文字列配列変数だった場合と、上記サンプルの aaaaaaaaaa が再配置された場合とを考慮に入れて修正してみました。 少なくとも上記サンプルは期待通り動くようになったのは確認できました。

NasubiKT commented 7 months ago

ありがとうございます。 期待通りに動作することを確認いたしました。 このISSUEはCLOSEさせていただきます。