anchor.diff:      :initform '()
       :reader shadow-stream-shadows)))
   
  -(defun shadow-read-char (stream)
  +(defmethod sys.gray:stream-read-char ((stream shadow-stream))
     (let ((c (read-char (shadow-stream-primary stream) nil)))
       (when c
         (dolist (s (shadow-stream-shadows stream))
           (write-char c s)))
       c))
   
  -(defmethod sys.gray:stream-read-char ((stream shadow-stream))
  -  (shadow-read-char stream))
  -
  -(defun shadow-write-char (character stream)
  +(defmethod sys.gray:stream-write-char ((stream shadow-stream) character)
     (write-char character (shadow-stream-primary stream))
     (dolist (s (shadow-stream-shadows stream))
       (write-char character s)))
  -
  -(defmethod sys.gray:stream-write-char ((stream shadow-stream) character)
  -  (shadow-write-char character stream))
   
   (defmethod close ((stream shadow-stream) &key abort)
     (close (shadow-stream-primary stream) :abort abort))
  
positive.code:                      (when (slot-value stream 'edit-handler)
                         (funcall (slot-value stream 'edit-handler) ch))))))))))
  
  (defmethod sys.gray:stream-read-char :around ((stream simple-edit-mixin))
    (edit-stream-read stream #'call-next-method))
  
  (defmethod sys.gray:stream-clear-input :before ((stream simple-edit-mixin))
    (when (slot-value stream 'edit-buffer)
      (setf (fill-pointer (slot-value stream 'edit-buffer)) 0
  	  (slot-value stream 'edit-offset) 0)))
  
  (defun edit-stream-edit (stream fn)
    (let ((old-buffer (slot-value stream 'edit-buffer))
  	(old-offset (slot-value stream 'edit-offset))
  	(old-handler (slot-value stream 'edit-handler))
  
negative.code:             (slot-value stream 'edit-offset) old-offset
              (slot-value stream 'edit-handler) old-handler))))
  
  (defclass shadow-stream (sys.gray:fundamental-binary-output-stream
                           sys.gray:fundamental-binary-input-stream
                           sys.gray:fundamental-character-output-stream
  