これ(getSingle関数の使い方? – プログラミング質問版)見ていて、ふとそのコードをAB5でコンパイルしてみました。やっぱりだめでした。そのGetSingle関数のバグも直っていませんが、まず最初に出くわしたのがsingle/double/byteがだめだったことです。

案の定、Single/Double/Byteにするとコンパイル通ります(それ以外にもいろいろ直しましたが)。バグ報告出そうかと思いましたが、CP4のところでそうしたと書いてあります。というわけで、これは仕様のようです。

同じようなことはまた起こりそうです。今後のためと思って、CP4以降の変更をSVNの記録から抜き出してみました。BasicCompiler32.exe, x86/abc.exeがコミットされたときのコミットログから、コンパイラ・デバッガの変更を私の独断と偏見に基づいて選んでいます。デリゲートや例外処理など新機能のバグ修正、コンパイラ・デバッガへの言及がないコミットログなどは取り除いてあります。重要なものもそうでないのもごちゃまぜ(およそ下から上へ時系列)なので見づらいですが、ご容赦ください。

  • 静的リンクライブラリ機構を実装した。
  • デリゲートの共変戻り値、反変引数に対応した。
  • 共変戻り値のオーバーロードをサポートした。
  • 関数の戻り値の構造体など、一時メモリに保持された構造体のメンバに直接アクセスした場合、その一時メモリの解放が正常に行われないバグを修正。
  • 代入演算時の左辺に関数呼び出しの戻り値を評価してメンバを取得するようなコードが存在するとき、エラーになってしまっていたので改修した。
  • Select Caseに指定された値でエラーが起こったとき、スコープ処理に不具合が生じてしまう問題を修正。
  • 列挙型メンバの初期値に十進数リテラル以外の定数や列挙型メンバを指定できないバグを修正。
  • 関数の戻り値がクラス型のとき、直接インデクサ指定できるような対応を行った。
  • デバッガ変数リストのローカル変数のスコープ判定が間違っていたため、修正。
  • コンストラクタ内でGetTypeメソッドを呼び出すと戻り値がNothingになってしまうバグを修正。
  • 動的型情報にメンバ情報を持たせた。
  • Catch、Finally節を持たないTryスコープを警告の対象とした。
  • Foreachを試験的に実装。
  • ジェネリクスインターフェイスをサポートした。
  • COMインターフェイスが扱えないデグレを修正。※COMインターフェイスの定義では必ずIUnkownを継承してください。
  • 例外処理機構実装。
  • メソッドの実装がある場合(抽象メソッドでない場合)にのみ”override”修飾子を必要とする仕様へと変更。
  • インターフェイス実装時に基底クラスのメソッドの再実装を可能にした。
  • AbstractメソッドはOverride修飾子を指定しなくても良い仕様へと変更。
  • インターフェイス機構の実装。
  • 基底クラスのメソッドを派生クラスで実装するインターフェイスのメソッドに置き換える仕様へと変更。
  • デリゲートを実装。
  • 構造体をクラスメソッドの戻り値にしたときにThisポインタが正常に引き渡されないバグを修正。
  • Protectedメソッドを派生クラス内のメソッドでSuperと指定するとエラーになるバグを修正。
  • クラスメソッド内でImportsされた名前空間内の情報が扱えないバグを修正。
  • 非仮想関数のオーバーライドを禁止した(エラーになります)。
  • インクルードパスに’/’文字を含めたときに’\\’として判断するようにした。

以下、CP5 (rev.524)以降、現在 (rev.539)までの変更点です。

  • 値渡しの構造体パラメータが正常に引き渡されない不具合を修正。
  • If/While/Doなどのステートメントに引き渡す式の戻り値がクラス型の場合はBoolean型へのキャストを試みるようにした。
  • キャスト演算子が存在せずに型変換できなかった場合のエラーメッセージを変更した。

スポンサード リンク

この記事のカテゴリ

  • ⇒ AB5 CP4→CP5コンパイラ変更点一覧