anchor.diff:  		((eq slot-type :string)
   		 (setf (slot-value object slot-name)
   			   (unpack-string length buffer (+ start offset))))
  +		((eq slot-type :wstring)
  +		 (setf (slot-value object slot-name)
  +			   (unpack-wstring length buffer (+ start offset))))
   		(t
   		 (setf (slot-value object slot-name)
   			   (unpack-array length slot-type buffer (+ start offset)))))))
  
positive.code: 			(error "Array length ~S not an integer." length))
  		  
  		  ;; check it's not a string without length
  		  (when (and (eq slot-type :string) (not arrayp))
  			(error "Strings must be given an explicit length."))
  
  		  ;; all ok, push the slot info onto the list
  
negative.code: ;; the actual packing/unpacking is done by some special code in the closures
  ;; generated by %define-packet-type. There MUST be a better way of doing it!!!
  (define-alias :string :uint8)
  (define-alias :wstring :uint16)
  
  ;; it'd be nicer if we could just define :string as a packet type, but this isn't possible.
  ;; maybe we need to be able to define array types?
  