• Christophe Rhodes's avatar
    Working input-replacement restart for decoding errors · de26a27d
    Christophe Rhodes authored
    It's all mildly horrible.  The input buffer-handling code is in
    streams.lisp, notionally generic code, which means that it's very hard
    to communicate out-of-band reasons for filling 0 characters (which could
    happen on end-of-file, on forced-end-of-file, on resync and now on
    input-replacement).  Instead, we have to communicate that out-of-band
    information between different fd-streams functions using extra slots in
    the stream, which is all fragile and intertwingly.
    
    One thing that has changed is that we're no longer using an UNREAD slot
    for dealing with unread-char; instead we always alter the buffer
    pointers.  We don't get that slot back, though; instead we use it for
    stuff to read in preference to the input buffer, FD-STREAM-INSTEAD.
    Most of the work in this patch is making sure that this is in fact
    always read first when necessary.
    
    This rearrangement also fixes the double-decoding-error when using the
    force-end-of-file restart, by using yet another new slot for noting that
    EOF was forced, so test for that in the relevant regression test (by
    counting the number of times the handler function is called).
    de26a27d
Name
Last commit
Last update
contrib Loading commit data...
doc Loading commit data...
src Loading commit data...
tests Loading commit data...
tools-for-build Loading commit data...
.cvsignore Loading commit data...
.gitignore Loading commit data...
BUGS Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
INSTALL Loading commit data...
NEWS Loading commit data...
OPTIMIZATIONS Loading commit data...
PRINCIPLES Loading commit data...
README Loading commit data...
STYLE Loading commit data...
TLA Loading commit data...
TODO Loading commit data...
base-target-features.lisp-expr Loading commit data...
binary-distribution.sh Loading commit data...
build-order.lisp-expr Loading commit data...
clean.sh Loading commit data...
common-lisp-exports.lisp-expr Loading commit data...
distclean.sh Loading commit data...
find-gnumake.sh Loading commit data...
html-distribution.sh Loading commit data...
install.sh Loading commit data...
make-config.sh Loading commit data...
make-genesis-2.lisp Loading commit data...
make-genesis-2.sh Loading commit data...
make-host-1.lisp Loading commit data...
make-host-1.sh Loading commit data...
make-host-2.lisp Loading commit data...
make-host-2.sh Loading commit data...
make-target-1.sh Loading commit data...
make-target-2-load.lisp Loading commit data...
make-target-2.lisp Loading commit data...
make-target-2.sh Loading commit data...
make-target-contrib.sh Loading commit data...
make-windows-installer.sh Loading commit data...
make.sh Loading commit data...
package-data-list.lisp-expr Loading commit data...
pubring.pgp Loading commit data...
run-sbcl.sh Loading commit data...
sbcl-pwd.sh Loading commit data...
slam.sh Loading commit data...
source-distribution.sh Loading commit data...
tagify.sh Loading commit data...
version.lisp-expr Loading commit data...
wc.sh Loading commit data...