% 関数仕様 - エラー
nptのドキュメントです。
参照元:ANSI Common Lisp npt
lisp.h
に記載されている下記の関数仕様を示します。
■abort
void lisp_abort(void);
void lisp_abortf(const char *fmt, ...);
void lisp_abort8(const void *fmt, ...);
void lisp_abort16(const void *fmt, ...);
void lisp_abort32(const void *fmt, ...);
lisp_abort_calltype lisp_set_abort_handler(lisp_abort_calltype call);
lisp_abort_calltype lisp_set_abort_setjmp_handler(void);
Lisp_abort_Begin
Lisp_abort_End
Lisp_abort_throw
■signal
int lisp_signal_(addr condition);
int lisp_error_(addr condition);
■error
int lisp_error8_(const void *str, ...);
int lisp_error16_(const void *str, ...);
int lisp_error32_(const void *str, ...);
■warn
int lisp_warn8_(const void *str, ...);
int lisp_warn16_(const void *str, ...);
int lisp_warn32_(const void *str, ...);
LISP ABORTの関数です。
void lisp_abort(void);
void lisp_abortf(const char *fmt, ...);
void lisp_abort8(const void *fmt, ...);
void lisp_abort16(const void *fmt, ...);
void lisp_abort32(const void *fmt, ...);
lisp_abort_calltype lisp_set_abort_handler(lisp_abort_calltype call);
lisp_abort_calltype lisp_set_abort_setjmp_handler(void);
Lisp_abort_Begin
Lisp_abort_End
Lisp_abort_throw
lisp_abort
void lisp_abort(void);
LISP ABORTを実行します。
LISP ABORT実行時には下記の挙動を行います。
LISP ABORT
という文言の出力exit(1)
の実行(プロセス終了)lisp_abortf
void lisp_abortf(const char *fmt, ...);
入力: fmt `printf`書式
標準エラーにメッセージを出力してからLISP ABORTします。
Lispは使用しませんので、いつでも実行できます。
lisp_abort8
void lisp_abort8(const void *fmt, ...);
void lisp_abort16(const void *fmt, ...);
void lisp_abort32(const void *fmt, ...);
入力: fmt Unicode文字列
lisp_format_
関数を用いて
error-output
にエラーメッセージを出力したあと、
LISP ABORTします。
Lispで処理を行いますので、Common Lispが実行可能状態である必要があります。
Unicode文字列の詳細はlisp_string8_
関数をご確認ください。
lisp_abort16
lisp_abort8
で解説
lisp_abort32
lisp_abort8
で解説
lisp_set_abort_handler
lisp_abort_calltype lisp_set_abort_handler(lisp_abort_calltype call);
入力: call ハンドラー void (*)(void)型
戻り値: 設定前のハンドラー
LISP ABORT実行時に呼び出されるハンドラーを指定します。
もし引数がNULLの場合は、ハンドラーを削除します。
lisp_set_abort_setjmp_handler
lisp_abort_calltype lisp_set_abort_setjmp_handler(void);
戻り値: 設定前のハンドラー
setjmp
用のハンドラーを設定します。
Lisp_abort_Begin
#define Lisp_abort_Begin ...
#define Lisp_abort_End ...
#define Lisp_abort_throw() ...
LISP ABORTの捕捉を行います。
この仕組みを使用するためには、lisp_set_abort_setjmp_handler
を実行して
setjmp
用のハンドラーを設定する必要があります。
捕捉はLisp_abort_Begin
とLisp_abort_End
を使い、
次のようにしてコードを囲みます。
Lisp_abort_Begin {
/* code */
}
Lisp_abort_End;
もしLisp_abort_throw()
が実行された場合は、
longjmp
によりLisp_abort_End
まで制御がジャンプします。
lisp_set_abort_setjmp_handler
が登録するハンドラーは、
単純にLisp_abort_throw()
が実行されるだけのコードであり、
例えば下記のような関数になります。
void abort_setjmp_handler(void)
{
Lisp_abort_throw();
}
通常であればマクロはsetjmp
/longjmp
に展開されますが、
C++コンパイラでかつLISP_ABORT_SETJMP
がdefineされていない場合は
try
/catch
に展開されます。
典型的な使用例を下記に示します。
int main(void)
{
int finish;
lisp_abort_calltype handler;
handler = lisp_set_abort_setjmp_handler();
finish = 0;
Lisp_abort_Begin {
lisp_abort();
finish = 1;
}
Lisp_abort_End;
lisp_set_abort_handler(handler);
if (finish == 0)
printf("LISP ABORT\n");
return 0;
}
Lisp_abort_End
Lisp_abort_Begin
で解説
Lisp_abort_throw
Lisp_abort_Begin
で解説
コンディションを発生させる関数です。
int lisp_signal_(addr condition);
int lisp_error_(addr condition);
lisp_signal_
int lisp_signal_(addr condition);
入力: condition インスタンス
戻り値: 脱出時は0以外
引数condition
をsignal
に渡します。
Common Lispのsignal
と同じです。
condition
がhold変数の場合は、内容が使用されます。
lisp_error_
int lisp_error_(addr condition);
入力: condition インスタンス
戻り値: 0以外
引数condition
をerror
に渡します。
Common Lispのerror
と同じです。
condition
がhold変数の場合は、内容が使用されます。
エラーの関数です。
int lisp_error8_(const void *str, ...);
int lisp_error16_(const void *str, ...);
int lisp_error32_(const void *str, ...);
lisp_error8_
int lisp_error8_(const void *str, ...);
int lisp_error16_(const void *str, ...);
int lisp_error32_(const void *str, ...);
入力: str Unicode文字列
戻り値: 0以外
引数simple-error
conditionを起こします。
Common Lispのerror
と同じです。
Unicode文字列の詳細はlisp_string8_
関数をご確認ください。
lisp_error16_
lisp_error8_
で解説
lisp_error32_
lisp_error8_
で解説
警告の関数です。
int lisp_warn8_(const void *str, ...);
int lisp_warn16_(const void *str, ...);
int lisp_warn32_(const void *str, ...);
lisp_warn8_
int lisp_warn8_(const void *str, ...);
int lisp_warn16_(const void *str, ...);
int lisp_warn32_(const void *str, ...);
入力: str Unicode文字列
戻り値: 脱出時は0以外
引数simple-warning
conditionを起こします。
Common Lispのwarn
と同じです。
Unicode文字列の詳細はlisp_string8_
関数をご確認ください。
lisp_warn16_
lisp_warn8_
で解説
lisp_warn32_
lisp_warn8_
で解説