2015年8月24日月曜日

V3.10のバグ

V3.10(まで)の不具合です。すべてV3.40で解決されました。もうないだろうと思っていてもまだまだ出てくるもので(T_T)/

・forに対応するnextが存在しないままプログラムが終わっていると、落ちる
例えば、
for i=0 to 2
//  next
はnextがないので、本来はエラーが発生するはずですが、落ちます。エラー処理で発生行を特定しようとするのですが、この場合、エラー発生行が存在しないのでこうなります。for側にてエラーを発生させれば良さそうですが、現在の処理では無理なので。
V3.10まででの回避策は、対応するnextをちゃんと記述することです。

・whileに対応するendwhileが存在しないままプログラムが終わっていると、落ちる
・repeatに対応するuntilが存在しないままプログラムが終わっていると、落ちる
・switchに対応するendswitchが存在しないままプログラムが終わっていると、落ちる
・funcに対応する endfuncが存在しないままプログラムが終わっていると、落ちる
・enum/fenum対応する endenumが存在しないままプログラムが終わっていると、落ちる
   forと同様の理由で発生します。

・10次元配列を宣言するとシステムエラーが発生する
 9次元までしか使えませんでした。また、エラーメッセージが正しくありませんでした。

・新規作成からファイルを保存しようとすると、ファイル名入力欄に「.!」と表示されている
  それを消してからファイル名を入力してください。

・デバッグ処理が残っている
 内部的にデバッグ用処理が有効のまま残ってました。
 実行には関係ありません。

・cardInit()でカードパターンファイル名がSHIFT-JISに対応してない
  V3.10まででは、UTF-8で指定していれば問題ありません。

・行番号付きプログラムが正しく読めない
 正確には、読み込めますが行番号が削除されません。
 V3.10で改行コードがCRのみのファイルに対応した時のエンバグです。
 サンプルではrandomWalk.basが実行できません。
 なお、行番号のあるなしは1行目で判断します。1行目に行番号がない場合、2行目以降に行番号があっても削除されません。それは仕様です。

・設定の旧表示互換がONにならない
 V3.10でのエンバグですが、潜在的にプログラムに問題がありました。
 英語版ではもう1つ、X68互換関数のON/OFFが変更できませんでした。

・プログラムソースの1文字目がサロゲートペア文字の場合、フォント選択画面で文字が表示されない
 正しく動くプログラムでは事実上ありえないけど。

・symbolt()でサロゲートペア文字を含めた時、正しく表示されない

・一部外部関数で、実行時エラーが発生しているはずなのに無視されてしまう
 X68互換関数は、内部的にはX-BASICで書いた処理を手動でObjective-Cにコンパイルしたような記述になっていますが、その中で呼び出している外部関数内でエラーが発生した時、無視されます。外部関数はエラーチェックを言語コア側に任せているため、コアを通さず呼び出した場合にはエラーがチェックされなかったわけです。

・テキスト文字が小さくなりすぎることがある
ディセンダーや文字表示のゴミ対策のため、文字が小さくなることが多くなりました。
計算式を見直し、できるだけV3.00以前と同じくらいになるようにしました。
ただし、行数が減る場合があります。

・beep2()のfloadonlyが無効
 毎回ファイルを読みに行ってた

・removeTouchArea()してもタッチエリアが開放されたように見えない(もしくはタイミングがずれて開放されるようにみえる)

・bitmapImgLoad()/bitmapTileImgLoad()に引数指定時の動作がおかしい
 引数とり込み処理がおかしかった。
 全部省略した時のみ正常動作したはず。

・print 整数数字時の前のスペースの入り方が/68と異なる
/68 iOS
"A";100;"B" A 100 B
"A";-100;"B" A-100 B A -100 B
実はぺけ-BASICと同じ。
floatはあってた(ぺけ-BASICは異なる)

・print "〜"; // とすると表示後改行が入ってしまう
 print "〜"; /* や
 print "〜";://なら改行は入らない

・最終桁で全角文字を表示するとき、先に改行されない
 今までは表示してから改行してた(故に、右端1文字は欠けることがあった)

・スプライト関数が無効の時、互換関数内のスプライト関係関数を呼び出すと異常になる
呼び出し先のスプライト関数が無効になっているのだから、それを使う関数も無効にしなければいけませんでした。

・enumの値を式を使って記述するとき、一部演算子を2つ以上連続で使っているとエラーになる
 たとえば、
enum
 C= 1+2+4// OK
 D= 1 or 2 and 4// エラーが発生する
 E= (1 or 2) and 4 // OK
endenum
となります。or/andだけではなく、比較演算子やshlなど複数あります。
 修正を試みましたが、中間コードコンパイルの核に関わる部分で、単純な修正では無理だとわかり ました。そのため、これは仕様とします。
 ()をつけると大丈夫ですので、そういう記述をおねがいします。

・ファンクションキーの表示座標が実は間違っていた
 今回clearance引数の追加に伴い処理を見なおした時に発覚しました。
 ファンクションキーを多段表示した時に間が空きすぎるのはそのためでした。

・bitmapOpen(fdirect=ON)で落ちることがある
 クリアサイズを求める変数が不定になっててエリアをオーバーしてクリアしてしまうことがありました。グラフィックを実行すると落ちることがあるのはほとんどこれが原因ではないかと。

・全くの初回起動時、V3.0以降で追加された設定が初期化されてない
 だから使えなくなっていました。

・サンプルのloadFromURL_zipExpand.basがエラーを発生する
これはサンプルのバグではなく、それが読み込もうとしているサーバー側のファイルの問題でした。すでに修正されています。

・zipExpand()で、Windows環境下で作られたZip内の日本語ファイル名ファイルが展開できない
Zip内のファイル名の文字コードは作られた環境に依存するようです。Windows上で作ったものはSHIFT-JISでした。ZipライブラリがUTF8にしか対応してなかったので自動判別して展開できるようにしました。

・jpegHeader()が正しい情報を返せないことがある
 想定外の格納され方をされていたためです。
 X68時代に作ったヘッダー解析処理では、現在の画像に対応しきれてませんでした。

・pngHeader()が正しい情報を返せないことがある
 PNGファイルはiOS内部に入れられるときヘッダーが改変される(多分リソース内のみ)ようで、情報の位置がずれてました。それに対応しました。

・motionGetRotation()/compassGetData()/symbol(,ht)/fontSize(,wy)/getWidth(,fontWx,fontWy)でfloat変数に値を返すときに落ちることがある

・モーション関数を使った後にメモリが確保されたままになっている
モーション関数を使ったプログラムを何度も実行するとメモリエラーが発生する可能性があります。

・motionEnd()を呼び出さないでendするとモーション機能が動いたままになってしまう

・emailSend()でzip圧縮した時のファイル作成日時がおかしい
これは使っていたライブラリ(ZipArchive)のバグでした。

・str$(正の数字)で前にスペースが入る
例えばstr$(1)=" 1"(len=2)になります。X-BASIC/68では前のスペースは外れるので"1"(len=1)です。これは浮動小数点数値でも同じです。なお、負数の場合は前に"-"が入ります。

0 件のコメント:

コメントを投稿