anchor.diff:            ,size)))))
   
   (defun generate-field-deserializer (message field vbuf vidx &key raw-p)
  +  "Generate a deserializer for a single field.
  +
  +Parameters:
  +  MESSAGE: The message-descriptor that contains the field.
  +  FIELD: The field-descriptor to deserialize.
  +  VBUF: The buffer to deserialize from.
  +  VIDX: The index of the buffer to rea dfrom.
  +  RAW-P: If true, return a list of the arguments passed to any recursive
  +         deserialization call instead of calling the function."
     (let ((nslot nil)
           (rslot nil))
       (let* ((class  (proto-class field))
  
positive.code: ;;; Type-checking is done at the top-level methods specialized on 'symbol',
  ;;; so we turn off all type checking at the level of these functions
  (defun generate-field-serializer (msg field boundp reader vbuf size)
    (let ((vval (gensym "VAL")))
      (let* ((class  (proto-class field))
             (index  (proto-index field)))
  
negative.code:                  (insert-in (cdr field-list))))))))
  
  (defun deserialize-structure-object (message buffer index limit end-tag class)
    "Deserialize a message.
  
  Parameters:
    MESSAGE: The message-descriptor of the data to be deserialized
    BUFFER: The buffer to read from.
    INDEX: The index of the buffer to read from.
    LIMIT: The upper bound of INDEX.
    END-TAG: [For groups only] The tag which ends a group.
    CLASS: The class which will be created and returned."
    (declare (type (simple-array (unsigned-byte 8)) buffer))
    ;; FIELD-MAP quickly translates a field number to its PROTO-FIELD object
    ;; without using linear scan
  