From: Richard M K. <kr...@us...> - 2008-10-16 21:28:54
|
Update of /cvsroot/sbcl/sbcl/src/code In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv2563/src/code Modified Files: error.lisp fd-stream.lisp Log Message: 1.0.21.19: Eagerly find a stream's external-format when a coding-error occurs. * Patch and test contributed by Zach Beane. Index: error.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/error.lisp,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- error.lisp 30 Jul 2008 16:35:26 -0000 1.35 +++ error.lisp 16 Oct 2008 21:28:46 -0000 1.36 @@ -104,7 +104,8 @@ (define-condition simple-stream-error (simple-condition stream-error) ()) (define-condition simple-parse-error (simple-condition parse-error) ()) -(define-condition character-coding-error (error) ()) +(define-condition character-coding-error (error) + ((external-format :initarg :external-format :reader character-coding-error-external-format))) (define-condition character-encoding-error (character-coding-error) ((code :initarg :code :reader character-encoding-error-code))) (define-condition character-decoding-error (character-coding-error) @@ -117,7 +118,8 @@ (code (character-encoding-error-code c))) (format s "~@<encoding error on stream ~S (~S ~S): ~2I~_~ the character with code ~D cannot be encoded.~@:>" - stream ':external-format (stream-external-format stream) + stream ':external-format + (character-coding-error-external-format c) code))))) (define-condition stream-decoding-error (stream-error character-decoding-error) () @@ -127,25 +129,26 @@ (octets (character-decoding-error-octets c))) (format s "~@<decoding error on stream ~S (~S ~S): ~2I~_~ the octet sequence ~S cannot be decoded.~@:>" - stream ':external-format (stream-external-format stream) + stream ':external-format + (character-coding-error-external-format c) octets))))) (define-condition c-string-encoding-error (character-encoding-error) - ((external-format :initarg :external-format :reader c-string-encoding-error-external-format)) + () (:report (lambda (c s) (format s "~@<c-string encoding error (:external-format ~S): ~2I~_~ the character with code ~D cannot be encoded.~@:>" - (c-string-encoding-error-external-format c) + (character-coding-error-external-format c) (character-encoding-error-code c))))) (define-condition c-string-decoding-error (character-decoding-error) - ((external-format :initarg :external-format :reader c-string-decoding-error-external-format)) + () (:report (lambda (c s) (format s "~@<c-string decoding error (:external-format ~S): ~2I~_~ the octet sequence ~S cannot be decoded.~@:>" - (c-string-decoding-error-external-format c) + (character-coding-error-external-format c) (character-decoding-error-octets c))))) (define-condition control-stack-exhausted (storage-condition) Index: fd-stream.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/fd-stream.lisp,v retrieving revision 1.131 retrieving revision 1.132 diff -u -d -r1.131 -r1.132 --- fd-stream.lisp 24 Sep 2008 14:55:15 -0000 1.131 +++ fd-stream.lisp 16 Oct 2008 21:28:46 -0000 1.132 @@ -418,12 +418,14 @@ (defun stream-decoding-error (stream octets) (error 'stream-decoding-error + :external-format (stream-external-format stream) :stream stream ;; FIXME: dunno how to get at OCTETS currently, or even if ;; that's the right thing to report. :octets octets)) (defun stream-encoding-error (stream code) (error 'stream-encoding-error + :external-format (stream-external-format stream) :stream stream :code code)) |