anchor.diff:             (type list slots))
   
     (if use-slot-names
  -      (loop
  -         (with-mread* (slot-name new-index) (ptr index end-index)
  -           (setf index new-index)
  -           (when (null slot-name) (return))
  -
  -           (with-mread* (value new-index) (ptr index end-index)
  -             (setf index new-index
  -                   (slot-value object slot-name) value))))
  -
  -      (dolist (slot (if slots-p slots (mlist-object-slots object)))
  -        (let ((slot-name (if (symbolp slot)
  -                             slot
  -                             (closer-mop:slot-definition-name slot))))
  -          (multiple-value-bind (value new-index)
  -              (mread ptr index end-index)
  -            (setf (slot-value object slot-name) value
  -                  index new-index)))))
  -
  -  (values object index))
  +      (mread-object-slots-using-names object ptr index end-index)
  +
  +      (progn
  +	(dolist (slot (if slots-p slots (mlist-object-slots object)))
  +	  (let ((slot-name (if (symbolp slot)
  +			       slot
  +			       (closer-mop:slot-definition-name slot))))
  +	    (mread-object-slot object ptr index end-index slot-name)))
  +	(values object index))))
   
   
   (defun check-slot-names (slots)
  
positive.code:                                :use-slot-names ,use-slot-names))))))
    
  
  (defmacro decl-mread-class (class-name &key use-slot-names
                                           (slots nil slots-p)
                                           (mread-object 'mread-object-slots)
                                           (new-instance  `(make-instance ',class-name)))
    "shortcut for (defmethod mread-object (...))"
    (declare (type symbol mread-object)
             (type list new-instance))
  
negative.code:     (with-gensyms (class ptr index end-index)
        `(defmethod mread-object ((,class (eql ',class-name)) ,ptr ,index ,end-index)
           (declare (type mem-size ,index ,end-index))
           ,(cond
  	   (use-slot-names
  	    (with-gensyms (object)
  	      `(let ((,object ,new-instance))
  		 (mread-object-slots-using-names ,object ,ptr ,index ,end-index))))
  
  	   (slots-p
  	    (with-gensyms (object)
  	      `(let ((,object ,new-instance))
  		 ,@(loop for slot-name in slots collect
  			`(mread-object-slot ,object ,ptr ,index ,end-index ',slot-name))
  		 (values ,object ,index))))
  
  	   (t
  	    `(,mread-object ,new-instance ,ptr ,index ,end-index
  			    :use-slot-names ,use-slot-names)))))))
  	 
      
  (defmacro decl-serializable-class (class-name
  				   &key use-slot-names
  				   (slots nil slots-p)
  				   (msize-object  'msize-object-slots)
  				   (mwrite-object 'mwrite-object-slots)
  				   (mread-object  'mread-object-slots)
  				   (new-instance  `(make-instance ',class-name)))
    `(progn
       ,@(when msize-object
               `((decl-msize-class ,class-name :use-slot-names ,use-slot-names
  