% 関数仕様 - エラー
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_abortvoid lisp_abort(void);
LISP ABORTを実行します。
LISP ABORT実行時には下記の挙動を行います。
LISP ABORTという文言の出力exit(1)の実行(プロセス終了)lisp_abortfvoid lisp_abortf(const char *fmt, ...);
入力: fmt `printf`書式
標準エラーにメッセージを出力してからLISP ABORTします。
Lispは使用しませんので、いつでも実行できます。
lisp_abort8void 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_abort16lisp_abort8で解説
lisp_abort32lisp_abort8で解説
lisp_set_abort_handlerlisp_abort_calltype lisp_set_abort_handler(lisp_abort_calltype call);
入力: call ハンドラー void (*)(void)型
戻り値: 設定前のハンドラー
LISP ABORT実行時に呼び出されるハンドラーを指定します。
もし引数がNULLの場合は、ハンドラーを削除します。
lisp_set_abort_setjmp_handlerlisp_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_EndLisp_abort_Beginで解説
Lisp_abort_throwLisp_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_で解説