condition-restart を更新しました

バグ修正とリファレンス書き直したり、とか。

変更点とか

check-type でこないだ作った typespec+ を使うようにしました

check-type 使ってたコードがちょびっと速くなったり、deftype した型を使えるようになります。
それで、condition-restart が typespec+ に依存するようにしようか迷った挙げ句、assert と check-type を別ファイルに分離しました。なので assert や check-type を使ってる場合は "condition-restart" ではなく "assertions" を require するように変更お願いします。あと typespec+ も必要になります。

余談: 細かくても作った分からリリースしてしまおうとかいう方針でやってったら、そのうち細々としたライブラリが大量になって依存関係で苦しむ予感。

ed:read-value などという関数を用意しておきました

再起動を対話的に起動された時の引数をどうやって受け付けるかは INTERACTIVE-FUNCTION で指定できて、xyzzy でユーザーから値の入力受け取るのは

(eval (read-sexp ">> "))

とでもしとけばいいんですが、エラーだったりしたときの処理を毎回書くのが面倒だったのでエラーだったらもっかい入力できるようなのを作っておきました。

関数 abort が再起動見つからなかったら quit を投げます

abort という関数がありまして、再起動 abort があればそれを起動するんですが、見つからなかったときに quit を投げるように変更しました。以前は restart-not-found というエラーを投げてて、CLHS の仕様的には以前の動作が正しいんですが、xyzzy では大抵は再起動 abort など用意されてないし quit の方が自然かな、と。

リファレンスあちこち書き直してみました

修正したバグ

  • find-restart, compute-restarts に CONDITION を与えずに呼び出した時に、再起動の TEST-FUNCTION を使ってなかった
  • find-restart にコンディションを与えて呼び出した時に、再起動の TEST-FUNCTION も関連付けチェックもしてなかった
  • restart-bind で再起動の本処理関数を評価してなかった(そのまま #'... に展開してた)
  • TEST-FUNCTION 内で find-restart とか compute-restarts した時に(そいつらが同じ TEST-FUNCTION を呼び出すので)無限ループってた
  • restart-case で直に cerror を置いた時の展開形が壊れてた
  • cerror で DATUM にコンディションを与えた時、同時に ARGS を与えるとエラーになってた
  • 関数 muffle-warning が引数 CONDITION を全く使ってなかった
  • 関数 warn が warning 以外のコンディションも投げれた

[追記]

  • 2011-02-22 10:22 -- リファレンスに不具合があったので更に更新しておきました orz