Use new MAP-RESTARTS in FIND-RESTART, COMPUTE-RESTARTS; fix FIND-RESTART
authorJan Moringen <jmoringe@techfak.uni-bielefeld.de>
Fri, 20 Sep 2013 20:49:11 +0000 (22:49 +0200)
committerChristophe Rhodes <c.rhodes@gold.ac.uk>
Tue, 22 Oct 2013 19:26:22 +0000 (20:26 +0100)
commit69e6aef5e6fb3bd682c7a2cbf774034d2ea58ee8
tree7f218121cdb143cbb3883e30a201e70604b7422d
parent657deda22e04e0f50d0aa63a83b806bebe2b7b1a
Use new MAP-RESTARTS in FIND-RESTART, COMPUTE-RESTARTS; fix FIND-RESTART

* Both FIND-RESTART and COMPUTE-RESTARTS traverse, filter and select
  active restarts, potentially for a particular condition and
  potentially calling restart test functions. This common behavior has
  been factored into the new function MAP-RESTARTS.

* Remove *CONDITION-RESTARTS*; use new slot ASSOCIATED-CONDITIONS in
  RESTART structure instead.

* As stated in bug 774410, when given a RESTART instance, FIND-RESTART
  did not test whether the restart was still active and whether the
  restart had been associated to a different condition in the
  meantime. This behavior has been changed by calling MAP-RESTARTS which
  checks activity and association to conditions (sadly, making

    (find-restart RESTART-INSTANCE CONDITION-OBJECT)

  a bit slower than before).

* INVOKE-RESTART is also affected by the changes for bug
  774410. However, it does not respect restart test functions when
  called with a RESTART instance (This is underspecified in CLHS and
  other implementations behave in various ways. However, behaving
  differently would make some restarts un-invokable).

* As suggested in bug 769615, (find-restart SYMBOL ...) now calls
  MAP-RESTARTS instead of COMPUTE-RESTARTS, consing less and executing
  faster in many cases.

* New (find-restart :recheck-conditions-and-tests :bug-774410) test from
  Jean-Philippe Paradis from original bug report in
  tests/condition.impure.lisp checks the new behavior.

Fixes lp#769615, lp#774410
NEWS
package-data-list.lisp-expr
src/code/defboot.lisp
src/code/target-error.lisp
src/code/target-thread.lisp
tests/condition.impure.lisp