<div dir="ltr">On Sun, Sep 14, 2008 at 3:44 PM, Leslie P. Polzer <span dir="ltr"><<a href="mailto:sky@viridian-project.de">sky@viridian-project.de</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d"><br>
> There is a problem with this which is not related to the internal / external<br>
> problem and which is that if the debugger jumps in when the reader is<br>
> working, then all the input is trashed.<br>
<br>
</div>Isn't that the real problem? Shouldn't the debugger allocate<br>
a new input buffer for itself?</blockquote><div><br>ECL does not do its own buffering. For better cooperation with the C world, this is done by the C streams which underly all Lisp stream objects.<br><br>But that is not the point. Even if we could allocate a new buffer, it would be just a hack: for the debugger would not only need to allocate a new buffer, it would first have to force the input stream to buffer all remaining lines (*) and only then expect user input. That requires low level knowledge of the input stream and would prevent user from replacing *standard-input* with any other CLOS stream, such as ecl-readline.<br>
<br>I am thinking about multiple lines because that is the way emacs
interacts with the lisp: it sends several lines of input at the time.
If the error is at the beginning of a line and the debugger just pops
in, it will see lots of lines with garbage, but which is needed for
useful recovery after we return from the debugger.<br>
<br>
CLISP (see below), does not provide that restart. Input is discarded and debugger may properly warn the user and return. SBCL does provide the restart, but in the multiline case it is just confusing for it now expects further input and it is not even clear _where_ the required input begins to apply: end of line? why? why not just after the offending symbol?<br>
</div></div><br>The only solution to the problem would be to allocate a new C stream
that points to a different tty or window and interacts with the user.<br>
<br clear="all">Juanjo<br><br>--example 1 : CLISP --<br>Copyright (c) Bruno Haible, Michael Stoll 1992, 1993<br>Copyright (c) Bruno Haible, Marcus Daniels 1994-1997<br>Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998<br>
Copyright (c) Bruno Haible, Sam Steingold 1999-2000<br>Copyright (c) Sam Steingold, Bruno Haible 2001-2008<br><br>Type :h and hit Enter for context help.<br><br>[1]> '(1 cl-user:foo 2                                                          <br>
3 4)<br><br>*** - READ from<br>       #<INPUT CONCATENATED-STREAM #<INPUT STRING-INPUT-STREAM><br>         #<IO TERMINAL-STREAM>><br>      : #<PACKAGE COMMON-LISP-USER> has no external symbol with name "FOO"<br>
The following restarts are available:<br>ABORT          :R1      Abort main loop<br>Break 1 [2]> :R1<br>[3]> <br>Bye.<br>$ <br><br><br>--example 2 : SBCL --<br><br>$ sbcl<br>This is SBCL 1.0.10, an implementation of ANSI Common Lisp.<br>
More information about SBCL is available at <<a href="http://www.sbcl.org/">http://www.sbcl.org/</a>>.<br><br>SBCL is free software, provided as is, with absolutely no warranty.<br>BSD-style licenses.  See the CREDITS and COPYING files in the<br>
distribution for more information.<br>* '(1 cl-user:foo 2                                                             <br>3 4 5)<br><br>debugger invoked on a SB-INT:SIMPLE-READER-PACKAGE-ERROR:<br>  SB-INT:SIMPLE-READER-PACKAGE-ERROR at 387 on #<SYNONYM-STREAM :SYMBOL SB-SYS:\<br>
*STDIN* {100BC7E9}>:<br>    Symbol "FOO" not found in the COMMON-LISP-USER package.<br><br>Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.<br><br>restarts (invokable by number or by possibly-abbreviated name):<br>
  0: [CONTINUE] Use symbol anyway.<br>  1: [ABORT   ] Exit debugger, returning to top level.<br><br>(SB-IMPL::READ-TOKEN #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {100BC7E9}> #\c)<br>0] 0<br>4 6)<br><br>(1 FOO 2 4 6)<br>
<br><br>-- <br>Instituto de FĂ­sica Fundamental<br>CSIC, Serrano, 113, Madrid 28040 (Spain) <br><a href="http://juanjose.garciaripoll.googlepages.com">http://juanjose.garciaripoll.googlepages.com</a><br>
</div>