anchor.diff:            for name = (slot-name slot)
             do (setf
                 (getf plist name)
  -              (foreign-struct-slot-value p slot)))
  +              (if (typep slot 'aggregate-struct-slot)
  +                  (loop for i from 0 below (slot-count slot)
  +                        with list = (make-list (slot-count slot))
  +                        with slot-ptr = (foreign-slot-pointer p type name)
  +                        do (setf (nth i list)
  +                                 (mem-aref slot-ptr (slot-type slot) i)))
  +                  (foreign-struct-slot-value p slot))))
       plist))
   
   (defmethod free-translated-object (value (p foreign-struct-type) freep)
  
positive.code:   (:method ((object list) (type foreign-struct-type) p)
      ;; Iterate over plist, set slots
      (loop for (name value) on object by #'cddr
            do (setf (foreign-slot-value p (unparse-type type) name)
                     ;; does this work for aggregate slots?
                     (convert-to-foreign
                      value
                      (slot-type (gethash name (structure-slots type))))))))
  
  (defun convert-into-foreign-memory (value type ptr)
    (let ((ptype (parse-type type)))
  
negative.code: ;;;; -*- Mode: lisp; indent-tabs-mode: nil -*-
  ;;; Time-stamp: <2011-09-30 00:00:50EDT structures.lisp>
  ;;;
  ;;; strings.lisp --- Operations on foreign strings.
  ;;;
  