anchor.diff:    index)
   
   
  +(defmacro mread-object-slots-using-names (object ptr index end-index)
  +  (with-gensyms (slot-name value new-index)
  +    `(progn
  +       (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))))
  +       (values ,object ,index))))
  +
  +
  +(defmacro mread-object-slot (object ptr index end-index slot-name)
  +  "Read an object slot previously written WITHOUT its name.
  +Note: slot-name will be evaluated - use 'foo, NOT foo"
  +  (with-gensyms (value new-index)
  +    `(multiple-value-bind (,value ,new-index)
  +	 (mread ,ptr ,index ,end-index)
  +       (setf (slot-value ,object ,slot-name) ,value
  +	     ,index ,new-index))))
   
   
   (defun mread-object-slots (object ptr index end-index
  
positive.code:            (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))
  
  
  (defun check-slot-names (slots)
  
negative.code: 
  
  
  
  
  (defmacro %msize* (index value &rest more-values)
  