anchor.diff:                        :collect `(define-reader
                                       ,public ,private ,type ,struct)))))
   
  -  (defmacro defslots (name supers slots &rest options)
  -    #.*defslots-doc*
  -    (parse-defslots supers slots options)
  +  (defmacro %defslots (name supers slots options)
       (multiple-value-bind (constructor slots-macro-name conc-name package)
           (defslots-names name)
         `(progn
  
positive.code: 
  (in-package #:lparallel.util)
  
  (eval-when (:compile-toplevel :load-toplevel :execute)
    (defparameter *defslots-doc*
      "Define a thing with slots.
  
  A `defslots' form may expand to either a `defclass' form or a
  `defstruct' form. Thou art foolish to depend upon either.
  
  The syntax of `defslots' matches that of `defclass' with the following
  restrictions: at most one superclass is permitted; `:initform',
  `:type', and `:reader', are the only slot options allowed;
  `:documentation' is the only class option allowed.
  
  `(defslots foo ...)' defines the functions `make-foo-instance' and
  `with-foo-slots' which are like `make-instance' and `with-slots'
  respectively. `make-foo-instance' takes keyword arguments
  corresponding to slots of the same name.
  
  All slots must be initialized when an instance is created, else an
  error will be signaled."))
  
  (defun plist-keys (plist)
    (loop
  
negative.code:          ',name))))
  
  #+lparallel.with-debug
  (defmacro %defslots (name supers slots options)
    (multiple-value-bind (constructor slots-macro-name) (defslots-names name)
      `(progn
         (defclass ,name ,supers
  