[slime-devel] Restartable frames

Helmut Eller heller at common-lisp.net
Mon Mar 22 18:26:58 UTC 2010


* Terje Norderhaug [2010-03-22 18:20+0100] writes:

> On Mar 22, 2010, at 6:54 AM, Helmut Eller wrote:
>> * Terje Norderhaug [2010-03-21 20:39+0100] writes:
>>
>>> Six swank back-ends implement the RESTART-FRAME interface. Yet only
>>> two of these back-ends implements FRAME-RESTARTABLE-P, which is used
>>> by the BACKTRACE slimefun to identify whether a frame is restartable.
>>>
>>> Allegro and SBCL implement both restart-frame and frame-restartable-
>>> p. ABCL, CCL, CLISP and LispWorks only implement restart-frame.
>>
>> ABCL doesn't support it; the code is just a comment.  CCL only on PPC.
>> CLISP or LispWorks have no documented debugger API and without knowing
>> the internals it's hard to say anything other than "may or may not
>> work".
>
> Hence there are really three answers to the question of whether a  
> frame is restartable: "yes", "no" and "maybe". Yet the BACKTRACE  
> slimefun only allows FRAME-RESTARTABLE-P to return T or NIL:
>
> (ecase (frame-restartable-p frame)
>    ((nil) nil)
>    ((t) `((:restartable t))))
>
> I suggest BACKTRACE passes on the "maybe" semantics to the client,  
> for example by returning the :restartable if and only if it  
> definitely can be determined whether or not a frame is restartable.  
> As in:
>
> (ecase (frame-restartable-p frame)
>    ((nil) `((:restartable nil)))
>    ((t) `((:restartable t)))
>    (:maybe nil))

What next? A probability that it might work?

>>> For consistency, perhaps back-ends that implement restart-frame also
>>> could implement frame-restartable-p?
>>
>> They can but it shouldn't be required.  The default implementation  
>> seems
>> good enough to me.
>
> The default implementation of frame-restartable-p always returns NIL,  
> even for back-ends that implement restart-frame. The consequence is  
> that swank clients are unable to determine whether a frame definitely  
> cannot be restarted or whether the frame might be restarted.

Then implement the predicate for those backends if you know how to do
it.

> This has usability implications as swank clients cannot adapt to  
> whether a frame certainly is restartable, might possibly be  
> restartable, or definitely isn't restartable.

There's no definive answer to this question without unwinding the stack
and executing unwind-protected handlers.

Helmut





More information about the slime-devel mailing list