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_throwlisp_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_で解説