2013年6月16日日曜日

V2.1のバグとその回避方法

X-BASIC for iOS V2.1に以下のバグが発見されました。
  1. vpriority()が即時反映されない
  2. tBackgroundAlpha()/gBackgroundAlpha()/kBackgroundAlpha()が即時反映されない
  3. gTransform()で変形をかけた状態で終了した時、次回の実行時に画面サイズがおかしくなる
  4. inputで入力中の文字が表示されない
  5. dim floatに{}で初期値を指定するとエラーになる
  6. 配列を引数に持つ関数の中で、子関数にその配列を渡すときエラーが発生する
  7. 配列の2次元目以降の要素番号チェックが正しくない
  8. 外部関数内で発生したエラーのメッセージが表示されない
  9. 実行時エラーの指す行がずれている

最後の5つ以外はV2.2で修正されますが、当面の回避策は以下の通りです。
  1. vpriority()を設定した後に以下の関数を呼び出すことで即時反映されます。
    func allPageUpdate(page;int)
      print " ";:// ここはテキスト表示に問題ないように変更すること
      apage(GPAGE0):line(0,0,0,0,0)
      apage(GPAGE1):line(0,0,0,0,0)
      apage(GPAGE2):line(0,0,0,0,0)
      apage(GPAGE3):line(0,0,0,0,0)
      apage(page)
    endfunc
    例えば、vpriority(page,GPAGE0,GPAGE1,GPAGE2,TPAGE):allPageUpdate(page)
  2. 関数呼び出し後、それぞれの画面を書き換える関数を呼び出すと同時に反映されます。
    たとえば、tBackgroundAlpha():print " "など。
  3. プログラム終了時にgTransform()として変形を解除しておけば回避できます。
  4. これはV2.1で画面表示を高速化したことによるエンバグです。回避策がありません。V2.2をお待ちください。
  5. (要素番号)=で1つ1つ代入してください
  6. これは回避策がありません。V2.3をお待ちください。
  7. 要素番号チェックは自前で行ってください。
  8. これは回避策がありません。V2.3をお待ちください。
  9. ほとんどの場合、実行時エラーは1つ下の行を指しています。その下の行がコメント行の場合は、さらにその下を指します。



また、以下は仕様です。
  • 内部関数で配列を引数にする時、そのサイズ指定にenum定数を使えない
    「例」func f(masu(WW,WW);int):// エラー発生
これは、以下の理由に依ります。
  1. 内部関数の名前と引数の登録は、コンパイルの前処理で行われている
  2. enum定数の決定はコンパイル中に行われる
  3. このため、内部関数定義中は定数が未定
これを解決するのは極めて難しく、使われる頻度と実装やデバッグの労力を考えた結果、 「仕様として制限する」ことにしました。 あしからず、ご了承ください。

どうしても即値で記述するのが嫌なら、要素数そのものを省略すればいいでしょう。
   「例」func f(masu(,);int)
(次元を表す ',' は省略不可。)

0 件のコメント:

コメントを投稿