« 【チラシのうら 21日目】GOSUB、RETURN、END文追加してみた | トップページ | 【チラシのうら 23日目】ガベージコレクションを実装してみた »

2026年7月14日 (火)

【チラシのうら 22日目】文字列変数を追加したら配列の演算バグが発見された

大部分を /* 未実装 */ にしていた文字列変数を実装しました。
で、テスト用に A$(1)=A(2)+A$(3) が実行できず、突き詰めてみたら A=123+B(1) が計算できない事が発覚。
数式演算での配列要素を入れると評価キューが壊れる事が発覚。
原因が分からずデバックに苦労しました。
やっと直った…と思たら甘かった…(´・ω・`)
トークンをシープ領域に展開するようにした(スタック領域の節約)影響で再起呼び出しでバグが出てました。


修正前
------------------------

M5Z-80 BASIC Ver.0.3
------------------------
Largest Internal = 110580(107.988KByte)
Largest PSRAM = 0(0)
Stack Free = 6428 bytes
READY.

A(2)=123
READY.

PRINT 321+A(2)+111
555
READY.

C$(2)="ABCDE"
READY.

D$="12345" + C$(2)
READY.

print D$
12345ABCDE
READY.

print 321+A((1+1)/2*2)+111
SYNTAX ERROR
READY.

A((1+1)/2*2) = 567
INVALID DATA
READY.


修正後
------------------------

M5Z-80 BASIC Ver.0.3
------------------------
Largest Internal = 110580(107.988KByte)
Largest PSRAM = 0(0)
Stack Free = 6428 bytes
READY.

dim B(10,10)
READY.

A(4) = 4
READY.

B(2,4)=567
READY.

PRINT B((1+1)/2*2 , A((4-2)*4-4));" -- ";A(2+2)
567 -- 4
READY.


ここまでの成果

  • 文字列が使えるようになった
  • 配列演算のバグ修正

|

« 【チラシのうら 21日目】GOSUB、RETURN、END文追加してみた | トップページ | 【チラシのうら 23日目】ガベージコレクションを実装してみた »

BASIC」カテゴリの記事

コメント

この記事へのコメントは終了しました。