[armedbear-devel] Serious bug involving UWP

Tobias C. Rittweiler tcr at freebits.de
Thu Sep 17 12:33:21 UTC 2009


Mark Evenson writes:

> On 9/17/09 10:56 AM, Tobias C. Rittweiler wrote:
>
>> C-c C-c is SWANK-COMPILE-STRING in swank-abcl.lisp.
>>
>> If you follow the control flow, you'll see that in SLDB-LOOP (we come
>> here through *DEBUGGER-HOOK*) in swank.lisp,
>>
>>    __the UNWINDED-PROTECT's protected form is *never* executed and it goes
>>    straight to the cleanup forms.__
>
> Hmmm, I don't come up with the same analysis of the control flow.  I 
> don't see the code going through SLDB-LOOP at all, but rather bombing 
> out in swank-abcl.lisp's implementation of SWANK-COMPILE-STRING at line 
> 396 because in ABCL the comma not inside a backquote is a READER-ERROR 
> which is not a subtype of the WARNING referenced in the enclosing 
> HANDLER-BIND.  The actual error is coming from READ-FROM-STRING:
>
> One can reproduce the error from the SLIME REPL by evaluating
>
> (SWANK-BACKEND:SWANK-COMPILE-STRING "(defun test (x) ,bar)" :BUFFER 
> "*slime-scratch*" :POSITION 1 :FILENAME NIL :POLICY NIL)
>
> If I bind a handler for ERROR in the enclosing HANDLER-BIND, I do trap 
> the error.
>
> Tobias:  are you relying on visual inspection of the problem here, or 
> are you getting a backtrace somehow?  I didn't understand your comment 
> "(we come here through *DEBUGGER-HOOK*)".

*DEBUGGER-HOOK* is set to SWANK-DEBUGGER-HOOK which calls DEBUG-IN-EMACS
which calls SLDB-LOOP.

READ-FROM-STRING calls ERROR which calls INVOKE-DEBUGGER which calls the
function in *DEBUGGER-HOOK*

Does that make more sense?

Just insert some FORMAT calls to SLDB-LOOP, in particular one before the
UWP, and one as the first form of the protected form.

> SBCL writes the string to a temporary file, then compiles that file. 
> Since the ABCL code for compiling a file works ok, I would maybe pursue 
> that route.

Yes, that's the way it should be implemented for other reasons: COMPILE
does not process source as file compiler, think of EVAL-WHEN.

See my comment at http://trac.common-lisp.net/armedbear/ticket/56 for
the proper way of how to implement SWANK-COMPILE-STRING.

I'll make it go the route over a temp file, but the UWP issue should be
resolved first otherwise I'd remove the way to reproduce this issue.

  -T.





More information about the armedbear-devel mailing list