anchor.diff:    (declare (ignore r))
     (logior sb-posix:o-rdwr sb-posix:o-creat))
   
  -(defgeneric fd-from-description (description))
  +(defgeneric fd-from-description (description)
  +  (:documentation
  +   "Given a description of a place, produce a file descriptor for that place.
  +
  +This function implements part of `bind-fd' and should not be called
  +directly."))
   (defmethod fd-from-description ((fd integer))
     fd)
   (defmethod fd-from-description ((io-file io-file))
  
positive.code:   (:report (lambda (c s) (format s "Can't retain unmanaged FD ~A" (fd-not-managed-fd c)))))
  
  (defun fd-retain (fd)
    (with-lock-held (%fd-retain-count-table-lock%)
      (unless (gethash fd %fd-retain-count-table%)
        (error 'fd-not-managed :fd fd))
  
negative.code:                              *umask*)))
        (fd-autorelease fd))))
  
  (defparameter *fd-bindings* nil
    "This variable contains information about how fds should be bound
  when a new process is spawned.
  
  This variable should not be accessed directly.  You should add
  bindings with `bind-fd' and query bindings with `get-fd'. See also
  `squash-fd-bindings'.")
  
  (defun bind-fd (fd description)
    "Extend `*fd-bindings*' to include a binding for `fd' to the thing
  implied by `description'.
  
  Note: `description' is interpreted by the `fd-from-description'
  generic function.
  
  This function doesn't actually modify the given fd in the current
  process.  Instead, it will simply store information about what the
  named fd should be bound to in spawned processes.  This may involve
  allocating a new fd in this process."
    (let ((from-fd (fd-from-description description)))
      (push (cons fd from-fd) *fd-bindings*)))
  
  (defun separator-par-p (separator)
    "Return non-nil iff the given separator non-terminal describes a
  & (par) separator."
    (check-type separator separator)
    (with-slots (separator-op) separator
      (when (slot-boundp separator 'separator-op)
  