Next: 14.3 try-catch式
Up: 14. 例外
Previous: 14.1 Exceptionクラス
SystemExceptionは、Cmm処理系がエラーに準じたトラブル状況を報告す
るために投げるための例外クラスです。Cmm処理系は、このクラスの例外を直
接投げることはなく、そのサブクラスを投げます。Cmmの仕様して定義してい
るSystemExceptionクラスのサブクラスは、以下のとおりです。
- DivisionByZeroException
0割算を行った場合、Cmm処理系は、このクラスのインスタンスを投げます。
- ArrayOutOfBoundsException
配列のインデックスが、配列の大きさの範囲に納まってていないとき、Cmm処
理系は、この例外を投げます。
- TypeMismatchException
これは、主に組み込み関数のために用意されている例外クラスです。渡された
引数のデータ型が、それ以降の処理に不適切な場合にこの例外を投げます。
- ArgNumberException
関数/メソッドで、可変引数を許してない、あるいは、可変引数ではあっても、
その数が少なすぎたり、多すぎたりした場合に投げる例外です。
- FileLoadException
load式で、ファイルのロードに失敗したときに、投げる例外です。
- PackageLoadException
package式で、バイナリパッケージのロードに失敗したときに、投げる
例外です。
例外が投げられるときは、通常の処理はそこで中断されます。try-catch式で例外インスタンスを補足するようになっていない場合は、そこ
でプログラムの実行が中断されます。
SystemExceptionクラスは、
class SystemException : Exception {
public pos ;
method New (mes) : (mes) ;
}
という定義になっています。posは、処理系がエラー発生個所の位置情報を格
納するためのエリアです。
インタープリタで、例外発生位置の情報を格納して、例外を投げることを想定
しています。プログラムで例外が補足されることがなく、処理系がプログラム
の実行を中止する場合に、このposを利用して発生位置を知らせることができ
ます。
SystemExceptionのサブクラスは、現在のところ上記の6つが定義され
ていますが、これからの仕様変更によって追加される可能性があります。
なお、SystemExceptionクラスのサブクラスは、処理系初期化時に、そのインス
タンスを下記の名前でインスタンスを準備しておきます。確実に例外を投げら
れることを保証するための措置です。
- var divisionByZeroException
- var arrayOutOfBoundsException
- var typeMismatchExceptino
- var argNumberException
- var fileLoadException
- var packageLoadException
Next: 14.3 try-catch式
Up: 14. 例外
Previous: 14.1 Exceptionクラス
Tetsuo Ono
1998-11-05