ラベル 回避法 の投稿を表示しています。 すべての投稿を表示
ラベル 回避法 の投稿を表示しています。 すべての投稿を表示

2013年7月2日火曜日

V2.2のバグとその回避法

X-BASIC for iOS v2.2に以下のバグが発見されました。

1. print/printsで先頭文字が全角の時、それ以下に半角文字があっても全て全角幅で表示されてしまう

これはV2.2でのみ発生します。
当面の回避法は、print/prints()の表示文字列中、全角と半角を分離してください。

print "ABCあいう"
 ↓
print "ABC";"あいう"


2. 単項演算子と2項演算子を含む式で「システムエラー」もしくは「式の型が異なる」が発生する
「例1」
   if a>=-128 and a<=-1 then {
   }

 「例2」
  a=(a>=-1 or a<=128)

回避するには、負数を()でくくります。
「例1」
   if a>=(-128) and a<=(-1) then {
   }
「例2」
  a=(a>=(-1) or a<=128)

 もしくはifを個別に分割します。
   if a>=-128 then {
       if a<=-1 then {
       }
   }

・・・ではありますが、いずれもV2.3で修正済みですので、バージョンアップするのが一番手っ取り早いです(^_^)。

この他の、V2.2までに発生していてるバグは以下の通りです。
  1. dim floatに{}で初期値を指定するとエラーになる
  2. 配列を引数に持つ関数の中で、子関数にその配列を渡すときエラーが発生する
  3. 配列の2次元目以降の要素番号チェックが正しくない
  4. 外部関数内で発生したエラーのメッセージが表示されない
  5. 配列要素番号が(通しで)32767を超えると動作が異常になるかエラーが発生する 
  6. グローバルもしくはローカルの変数領域が64KB以上必要なとき、うまく確保できない
  7. emailSend()で添付ファイルをzipで圧縮するとき、正しいzipファイルが生成されない 
  8. randomize()がrandomise()になってる(綴りミス)
  9. 実行時エラーの指す行がずれている
4番まではV2.3で修正されました。5~8はV2.4で修正されました。
実行時エラーは小規模プログラムでは直りましたが、大規模プログラムでは 大幅にずれる問題が解決できていません。


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)
(次元を表す ',' は省略不可。)