nptのドキュメントです。
参照元:ANSI Common Lisp npt
lisp.h
に記載されている下記の関数仕様を示します。
■abortvoid 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 call);
lisp_abort_calltype lisp_set_abort_handler(void);
lisp_abort_calltype lisp_set_abort_setjmp_handler
Lisp_abort_Begin
Lisp_abort_End
Lisp_abort_throw
■signalint lisp_signal_(addr condition);
int lisp_error_(addr condition);
■errorint lisp_error8_(const void *str, ...);
int lisp_error16_(const void *str, ...);
int lisp_error32_(const void *str, ...);
■warnint 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 call);
lisp_abort_calltype lisp_set_abort_handler(void);
lisp_abort_calltype lisp_set_abort_setjmp_handler
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 call);
lisp_abort_calltype lisp_set_abort_handler
: call ハンドラー void (*)(void)型
入力: 設定前のハンドラー 戻り値
LISP ABORT実行時に呼び出されるハンドラーを指定します。
もし引数がNULLの場合は、ハンドラーを削除します。
lisp_set_abort_setjmp_handler
(void);
lisp_abort_calltype lisp_set_abort_setjmp_handler
: 設定前のハンドラー 戻り値
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
= lisp_set_abort_setjmp_handler();
handler = 0;
finish {
Lisp_abort_Begin ();
lisp_abort= 1;
finish }
;
Lisp_abort_End(handler);
lisp_set_abort_handler
if (finish == 0)
("LISP ABORT\n");
printf
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_
で解説