[flexi-streams-cvs] r38 - in branches/edi: . doc test

eweitz at common-lisp.net eweitz at common-lisp.net
Tue May 20 23:45:26 UTC 2008


Author: eweitz
Date: Tue May 20 19:45:25 2008
New Revision: 38

Modified:
   branches/edi/conditions.lisp
   branches/edi/decode.lisp
   branches/edi/doc/index.html
   branches/edi/encode.lisp
   branches/edi/external-format.lisp
   branches/edi/flexi-streams.asd
   branches/edi/input.lisp
   branches/edi/mapping.lisp
   branches/edi/output.lisp
   branches/edi/packages.lisp
   branches/edi/specials.lisp
   branches/edi/test/test.lisp
   branches/edi/util.lisp
Log:
IO stream cleanup


Modified: branches/edi/conditions.lisp
==============================================================================
--- branches/edi/conditions.lisp	(original)
+++ branches/edi/conditions.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/conditions.lisp,v 1.5 2008/05/19 07:57:07 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/conditions.lisp,v 1.6 2008/05/20 23:44:45 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -48,6 +48,15 @@
   (:documentation "Errors of this type are signalled if the flexi
 stream has a wrong element type."))
 
+(define-condition flexi-stream-out-of-sync-error (flexi-stream-error)
+  ()
+  (:report (lambda (condition stream)
+             (format stream "Stream out of sync from previous
+lookahead, couldn't rewind.")))
+  (:documentation "This can happen if you're trying to write to an IO
+stream which had prior to that `looked ahead' while reading and now
+can't `rewind' to the octet where you /should/ be."))
+
 (define-condition in-memory-stream-error (stream-error)
   ()
   (:documentation "Superclass for all errors related to

Modified: branches/edi/decode.lisp
==============================================================================
--- branches/edi/decode.lisp	(original)
+++ branches/edi/decode.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/decode.lisp,v 1.15 2008/05/20 09:37:43 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/decode.lisp,v 1.16 2008/05/20 23:01:50 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -61,12 +61,12 @@
 whenever this function is called."))
 
 (defmethod octets-to-char-code ((format flexi-latin-1-format) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (function reader))
   (funcall reader))
 
 (defmethod octets-to-char-code ((format flexi-ascii-format) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (function reader))
   (when-let (octet (funcall reader))
     (if (> (the octet octet) 127)
@@ -75,7 +75,7 @@
       octet)))
 
 (defmethod octets-to-char-code ((format flexi-8-bit-format) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (function reader))
   (with-accessors ((decoding-table external-format-decoding-table))
       format
@@ -89,7 +89,7 @@
           char-code)))))
 
 (defmethod octets-to-char-code ((format flexi-utf-8-format) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (function reader))  
   (let (first-octet-seen)
     (declare (boolean first-octet-seen))
@@ -105,7 +105,7 @@
       (let ((octet (read-next-byte)))
         (declare (type octet octet))
         (multiple-value-bind (start count)
-            (cond ((zerop (logand octet #b10000000))
+            (cond ((not (logbitp 7 octet))
                    (values octet 0))
                   ((= #b11000000 (logand octet #b11100000))
                    (values (logand octet #b00011111) 1))
@@ -124,8 +124,8 @@
           (declare (fixnum count))
           ;; note that we currently don't check for "overlong"
           ;; sequences or other illegal values
-          (loop for result of-type (unsigned-byte 32)
-                = start then (+ (ash (the (unsigned-byte 26) result) 6)
+          (loop for result of-type code-point
+                = start then (+ (ash result 6)
                                 (logand octet #b111111))
                 repeat count
                 for octet of-type octet = (read-next-byte)
@@ -136,7 +136,7 @@
                 finally (return result)))))))
 
 (defmethod octets-to-char-code ((format flexi-utf-16-le-format) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (function reader))
   (let (first-octet-seen)
     (declare (boolean first-octet-seen))
@@ -169,7 +169,7 @@
                 (t word)))))))
 
 (defmethod octets-to-char-code ((format flexi-utf-16-be-format) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (function reader))
   (let (first-octet-seen)
     (declare (boolean first-octet-seen))
@@ -202,7 +202,7 @@
                 (t word)))))))
 
 (defmethod octets-to-char-code ((format flexi-utf-32-le-format) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (function reader))
   (let (first-octet-seen)
     (declare (boolean first-octet-seen))
@@ -220,7 +220,7 @@
             sum (ash octet count)))))
 
 (defmethod octets-to-char-code ((format flexi-utf-32-be-format) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (function reader))
   (let (first-octet-seen)
     (declare (boolean first-octet-seen))
@@ -238,7 +238,7 @@
             sum (ash octet count)))))
 
 (defmethod octets-to-char-code ((format flexi-cr-mixin) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (ignore reader))
   (let ((char-code (call-next-method)))
     (case char-code
@@ -246,7 +246,7 @@
       (otherwise char-code))))
 
 (defmethod octets-to-char-code ((format flexi-crlf-mixin) reader)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (function *current-unreader*))
   (declare (ignore reader))
   (let ((char-code (call-next-method)))

Modified: branches/edi/doc/index.html
==============================================================================
--- branches/edi/doc/index.html	(original)
+++ branches/edi/doc/index.html	Tue May 20 19:45:25 2008
@@ -89,6 +89,7 @@
       <li><a href="#*substitution-char*"><code>*substitution-char*</code></a>
       <li><a href="#octet"><code>octet</code></a>
       <li><a href="#flexi-stream-error"><code>flexi-stream-error</code></a>
+      <li><a href="#flexi-stream-out-of-sync-error"><code>flexi-stream-out-of-sync-error</code></a>
       <li><a href="#flexi-stream-element-type-error"><code>flexi-stream-element-type-error</code></a>
       <li><a href="#flexi-stream-element-type-error-element-type"><code>flexi-stream-element-type-error-element-type</code></a>
       </ol>
@@ -804,6 +805,15 @@
 </blockquote>
 
 <p><br>[Condition]
+<br><a class=none name="flexi-stream-out-of-sync-error"><b>flexi-stream-out-of-sync-error</b></a>
+
+<blockquote><br> This can happen if you're trying to write to
+an <a href="#flexi-io-stream">IO stream</a> which had prior to that
+"looked ahead" while reading and now can't "rewind" to the octet where
+you <em>should</em> be.
+</blockquote>
+
+<p><br>[Condition]
 <br><a class=none name="flexi-stream-element-type-error"><b>flexi-stream-element-type-error</b></a>
 
 <blockquote><br>
@@ -1030,7 +1040,7 @@
 numerous patches and additions.
 
 <p>
-$Header: /usr/local/cvsrep/flexi-streams/doc/index.html,v 1.104 2008/05/20 06:55:21 edi Exp $
+$Header: /usr/local/cvsrep/flexi-streams/doc/index.html,v 1.105 2008/05/20 23:44:47 edi Exp $
 <p><a href="http://weitz.de/index.html">BACK TO MY HOMEPAGE</a>
 
 </body>

Modified: branches/edi/encode.lisp
==============================================================================
--- branches/edi/encode.lisp	(original)
+++ branches/edi/encode.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/encode.lisp,v 1.11 2008/05/20 08:02:49 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/encode.lisp,v 1.12 2008/05/20 23:01:50 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -38,7 +38,7 @@
 unspecified."))
 
 (defmethod char-to-octets ((format flexi-latin-1-format) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char) (function writer))
   (let ((octet (char-code char)))
     (when (> octet 255)
@@ -46,7 +46,7 @@
     (funcall writer octet)))
 
 (defmethod char-to-octets ((format flexi-ascii-format) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char) (function writer))
   (let ((octet (char-code char)))
     (when (> octet 127)
@@ -54,7 +54,7 @@
     (funcall writer octet)))
 
 (defmethod char-to-octets ((format flexi-8-bit-format) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char) (function writer))
   (with-accessors ((encoding-hash external-format-encoding-hash))
       format
@@ -64,7 +64,7 @@
       (funcall writer octet))))
 
 (defmethod char-to-octets ((format flexi-utf-8-format) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char) (function writer))
   (let ((char-code (char-code char)))
     (tagbody
@@ -96,7 +96,7 @@
      zero)))
 
 (defmethod char-to-octets ((format flexi-utf-16-le-format) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char) (function writer))
   (flet ((write-word (word)
            (funcall writer (ldb (byte 8 0) word))
@@ -111,7 +111,7 @@
                (write-word (logior #xdc00 (ldb (byte 10 0) char-code))))))))
 
 (defmethod char-to-octets ((format flexi-utf-16-be-format) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char) (function writer))
   (flet ((write-word (word)
            (funcall writer (ldb (byte 8 8) word))
@@ -126,7 +126,7 @@
                (write-word (logior #xdc00 (ldb (byte 10 0) char-code))))))))
 
 (defmethod char-to-octets ((format flexi-utf-32-le-format) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char) (function writer))
   (let ((char-code (char-code char)))
     (funcall writer (ldb (byte 8 0) char-code))
@@ -135,7 +135,7 @@
     (funcall writer (ldb (byte 8 24) char-code))))
 
 (defmethod char-to-octets ((format flexi-utf-32-be-format) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char) (function writer))
   (let ((char-code (char-code char)))
     (funcall writer (ldb (byte 8 24) char-code))
@@ -144,14 +144,14 @@
     (funcall writer (ldb (byte 8 0) char-code))))
 
 (defmethod char-to-octets ((format flexi-cr-mixin) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char))
   (if (char= char #\Newline)
     (call-next-method format #\Return writer)
     (call-next-method)))
 
 (defmethod char-to-octets ((format flexi-crlf-mixin) char writer)
-  (declare #.*standard-optimize-settings*)
+  (declare #.*fixnum-optimize-settings*)
   (declare (character char))
   (cond ((char= char #\Newline)
          (call-next-method format #\Return writer)

Modified: branches/edi/external-format.lisp
==============================================================================
--- branches/edi/external-format.lisp	(original)
+++ branches/edi/external-format.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/external-format.lisp,v 1.20 2008/05/20 08:02:50 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/external-format.lisp,v 1.21 2008/05/20 23:44:45 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -284,7 +284,7 @@
                                  'flexi-crlf-utf-32-be-format))))))))
                          
 (defun make-external-format% (name &key (little-endian *default-little-endian*)
-                                        id eol-style)
+                                   id eol-style)
   "Used internally by MAKE-EXTERNAL-FORMAT to default some of the
 keywords arguments and to determine the right subclass of
 EXTERNAL-FORMAT."
@@ -297,7 +297,9 @@
                  (list :eol-style (or eol-style *default-eol-style*)))
                 ((code-page-name-p real-name)
                  (list :id (or (known-code-page-id-p id)
-                               (error "Unknown code page ID ~S" id))
+                               (error 'external-format-error
+                                      :format-control "Unknown code page ID ~S"
+                                      :format-arguments (list id)))
                        ;; default EOL style for Windows code pages is :CRLF
                        :eol-style (or eol-style :crlf)))
                 (t (list :eol-style (or eol-style *default-eol-style*)

Modified: branches/edi/flexi-streams.asd
==============================================================================
--- branches/edi/flexi-streams.asd	(original)
+++ branches/edi/flexi-streams.asd	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/flexi-streams.asd,v 1.63 2008/05/18 23:13:59 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/flexi-streams.asd,v 1.64 2008/05/20 23:01:51 edi Exp $
 
 ;;; Copyright (c) 2005-2007, Dr. Edmund Weitz.  All rights reserved.
 
@@ -54,6 +54,7 @@
                #+:lispworks (:file "lw-binary-stream")
                (:file "output")
                (:file "input")
+               (:file "io")
                (:file "strings"))
   :depends-on (:trivial-gray-streams))
 

Modified: branches/edi/input.lisp
==============================================================================
--- branches/edi/input.lisp	(original)
+++ branches/edi/input.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/input.lisp,v 1.67 2008/05/20 09:38:07 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/input.lisp,v 1.68 2008/05/20 23:01:51 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -213,7 +213,7 @@
                    (element-type flexi-stream-element-type)
                    (stream flexi-stream-stream))
       flexi-input-stream
-    (let* ((buffer (make-octet-buffer))
+    (let* (buffer
            (buffer-pos 0)
            (buffer-end 0)
            (index start)
@@ -229,7 +229,7 @@
            ;; OCTET-STACK), especially for UTF-8
            (reserve (if (floatp factor) (* 2 integer-factor) 0)))
       (declare (fixnum buffer-pos buffer-end index integer-factor reserve)
-               (type (array octet *) buffer))
+               (boolean want-chars-p))
       (flet ((compute-minimum ()
                "Computes the minimum amount of octets we can savely
 read into the buffer without violating the stream's bound \(if there
@@ -243,6 +243,15 @@
              (fill-buffer (end)
                "Tries to fill the buffer from BUFFER-POS to END and
 returns NIL if the buffer doesn't contain any new data."
+               ;; put data from octet stack into buffer if there is any
+               (loop
+                (when (>= buffer-pos end)
+                  (return))
+                (let ((next-octet (pop octet-stack)))
+                  (cond (next-octet
+                         (setf (aref (the (array octet *) buffer) buffer-pos) (the octet next-octet))
+                         (incf buffer-pos))
+                        (t (return)))))
                (setq buffer-end (read-sequence buffer stream
                                                :start buffer-pos
                                                :end end))
@@ -254,15 +263,7 @@
                  (incf position buffer-end))))
         (let ((minimum (compute-minimum)))
           (declare (fixnum minimum))
-          ;; put data from octet stack into buffer if there is any
-          (loop
-           (when (>= buffer-pos minimum)
-             (return))
-           (let ((next-octet (pop octet-stack)))
-             (cond (next-octet
-                    (setf (aref buffer buffer-pos) (the octet next-octet))
-                    (incf buffer-pos))
-                   (t (return)))))
+          (setq buffer (make-octet-buffer minimum))
           ;; fill buffer for the first time or return immediately if
           ;; we don't succeed
           (unless (fill-buffer minimum)
@@ -277,7 +278,7 @@
                    (unless (fill-buffer (compute-minimum))
                      (return-from next-octet)))
                  (prog1
-                     (aref buffer buffer-pos)
+                     (aref (the (array octet *) buffer) buffer-pos)
                    (incf buffer-pos)))
                (unreader (char)
                  (unread-char% char flexi-input-stream)))
@@ -310,7 +311,7 @@
                                 (when (>= buffer-pos buffer-end)
                                   (return))
                                 (decf buffer-end)
-                                (push (aref buffer buffer-end) octet-stack))
+                                (push (aref (the (array octet *) buffer) buffer-end) octet-stack))
                                (leave))
                              (let ((next-thing ,(if octetp
                                                   '(next-octet)

Modified: branches/edi/mapping.lisp
==============================================================================
--- branches/edi/mapping.lisp	(original)
+++ branches/edi/mapping.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/mapping.lisp,v 1.1 2008/05/19 09:09:15 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/mapping.lisp,v 1.2 2008/05/20 21:15:45 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -40,9 +40,16 @@
   #-:lispworks 'character)
 
 (deftype char-code-integer ()
-  "The type of integers which can be returned by the function CHAR-CODE."
+  "The subtype of integers which can be returned by the function CHAR-CODE."
   '(integer 0 #.(1- char-code-limit)))
 
+(deftype code-point ()
+  "The subtype of integers that's just big enough to hold all Unicode
+codepoints.
+
+See for example <http://unicode.org/glossary/#C>."
+  '(mod #x110000))
+
 (defmacro defconstant (name value &optional doc)
   "Make sure VALUE is evaluated only once \(to appease SBCL)."
   `(cl:defconstant ,name (if (boundp ',name) (symbol-value ',name) ,value)

Modified: branches/edi/output.lisp
==============================================================================
--- branches/edi/output.lisp	(original)
+++ branches/edi/output.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/output.lisp,v 1.54 2008/05/20 06:15:44 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/output.lisp,v 1.56 2008/05/20 23:44:45 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -29,37 +29,37 @@
 
 (in-package :flexi-streams)
 
-(defgeneric write-byte* (byte sink)
+(defgeneric write-byte* (byte stream)
+  (declare #.*standard-optimize-settings*)
   (:documentation "Writes one byte \(octet) to the underlying stream
-of SINK \(if SINK is a flexi stream) or adds the byte to the end of
-SINK \(if SINK is an array with a fill pointer)."))
+STREAM."))
 
 #-:lispworks
-(defmethod write-byte* (byte (sink flexi-output-stream))  
+(defmethod write-byte* (byte (flexi-output-stream flexi-output-stream))  
   (declare #.*standard-optimize-settings*)
   (with-accessors ((stream flexi-stream-stream))
-      sink
+      flexi-output-stream
     (write-byte byte stream)))
 
 #+:lispworks
-(defmethod write-byte* (byte (sink flexi-output-stream))
+(defmethod write-byte* (byte (flexi-output-stream flexi-output-stream))
   (declare #.*standard-optimize-settings*)
   ;; we use WRITE-SEQUENCE because WRITE-BYTE doesn't work with all
   ;; bivalent streams in LispWorks (4.4.6)
   (with-accessors ((stream flexi-stream-stream))
-      sink
+      flexi-output-stream
     (write-sequence (make-array 1 :element-type 'octet
                                 :initial-element byte)
                     stream)
     byte))
 
 #+:lispworks
-(defmethod write-byte* (byte (sink flexi-binary-output-stream))
+(defmethod write-byte* (byte (flexi-output-stream flexi-binary-output-stream))
   "Optimized version \(only needed for LispWorks) in case the
 underlying stream is binary."
   (declare #.*standard-optimize-settings*)
   (with-accessors ((stream flexi-stream-stream))
-      sink
+      flexi-output-stream
     (write-byte byte stream)))
 
 (defmethod stream-write-char ((stream flexi-output-stream) char)
@@ -180,7 +180,7 @@
     (return-from stream-write-sequence
       (call-next-method)))
   (let ((buffer (make-array (+ +buffer-size+ 20)
-                            :element-type '(unsigned-byte 8)
+                            :element-type 'octet
                             :fill-pointer 0))
         (last-newline-pos (position #\Newline sequence
                                     :test #'char=

Modified: branches/edi/packages.lisp
==============================================================================
--- branches/edi/packages.lisp	(original)
+++ branches/edi/packages.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/packages.lisp,v 1.33 2008/05/19 07:57:08 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/packages.lisp,v 1.34 2008/05/20 23:44:45 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -53,12 +53,13 @@
            :flexi-io-stream
            :flexi-stream
            :flexi-stream-bound
+           :flexi-stream-column
            :flexi-stream-external-format
            :flexi-stream-element-type
            :flexi-stream-element-type-error
            :flexi-stream-element-type-error-element-type
            :flexi-stream-error
-           :flexi-stream-column
+           :flexi-stream-out-of-sync-error
            :flexi-stream-position
            :flexi-stream-stream
            :get-output-stream-sequence

Modified: branches/edi/specials.lisp
==============================================================================
--- branches/edi/specials.lisp	(original)
+++ branches/edi/specials.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/specials.lisp,v 1.31 2008/05/19 07:57:08 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/specials.lisp,v 1.32 2008/05/20 23:01:51 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -38,6 +38,17 @@
     (compilation-speed 0))
   "The standard optimize settings used by most declaration expressions.")
 
+(defvar *fixnum-optimize-settings*
+  '(optimize
+    speed
+    (safety 0)
+    (space 0)
+    (debug 1)
+    (compilation-speed 0)
+    #+:lispworks (hcl:fixnum-safety 0))
+  "Like *STANDARD-OPTIMIZE-SETTINGS*, but \(on LispWorks) with all
+arithmetic being fixnum arithmetic.")
+
 (defvar *current-unreader* nil
   "A unary function which might be called to `unread' a character
 \(i.e. the sequence of octets it represents).
@@ -162,7 +173,7 @@
 corresponding octets.")
 
 (defconstant +buffer-size+ 8192
-  "Size of buffers used for internal purposes.")
+  "Default size for buffers used for internal purposes.")
 
 (pushnew :flexi-streams *features*)
 

Modified: branches/edi/test/test.lisp
==============================================================================
--- branches/edi/test/test.lisp	(original)
+++ branches/edi/test/test.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS-TEST; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/test/test.lisp,v 1.30 2008/05/20 09:37:30 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/test/test.lisp,v 1.31 2008/05/20 23:01:53 edi Exp $
 
 ;;; Copyright (c) 2006-2008, Dr. Edmund Weitz.  All rights reserved.
 

Modified: branches/edi/util.lisp
==============================================================================
--- branches/edi/util.lisp	(original)
+++ branches/edi/util.lisp	Tue May 20 19:45:25 2008
@@ -1,5 +1,5 @@
 ;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: FLEXI-STREAMS; Base: 10 -*-
-;;; $Header: /usr/local/cvsrep/flexi-streams/util.lisp,v 1.19 2008/05/19 22:32:57 edi Exp $
+;;; $Header: /usr/local/cvsrep/flexi-streams/util.lisp,v 1.21 2008/05/20 23:44:45 edi Exp $
 
 ;;; Copyright (c) 2005-2008, Dr. Edmund Weitz.  All rights reserved.
 
@@ -176,12 +176,20 @@
        ,instance
      , at body))
 
-(defun make-octet-buffer ()
+(defun make-octet-buffer (&optional (size +buffer-size+))
   "Creates and returns a fresh buffer \(a specialized array) of size
 +BUFFER-SIZE+ to hold octets."
-  (make-array +buffer-size+ :element-type 'octet))
+  (declare #.*standard-optimize-settings*)
+  (make-array size :element-type 'octet))
 
 (defun type-equal (type1 type2)
   "Whether TYPE1 and TYPE2 denote the same type."
+  (declare #.*standard-optimize-settings*)
   (and (subtypep type1 type2)
-       (subtypep type2 type1)))
\ No newline at end of file
+       (subtypep type2 type1)))
+
+(defun maybe-rewind (stream octets)
+  "Tries to `rewind' the \(binary) stream STREAM by OCTETS octets.
+Returns a true value if it succeeds."
+  (when-let (position (file-position stream))
+    (file-position stream (- position octets))))
\ No newline at end of file



More information about the Flexi-streams-cvs mailing list