anchor.diff:  
   (defmacro defstruct-g (name-and-options &body slot-descriptions)
     (dbind (name &key (accesors t) (constructor (symb 'make- name))
  -               (readers t) (writers t) (pull-push t) (attribs t) (populate t))
  +               (readers t) (writers t) (pull-push t) (attribs t) (populate t)
  +               (layout :default))
         (listify name-and-options)
       (let* ((slots (mapcar (lambda (_) (normalize-slot-description
                                          _ name (and readers accesors)
  
positive.code:      (reader :initarg :reader :reader s-reader)
       (writer :initarg :writer :reader s-writer)
       (uses-method-p :initarg :uses-method-p :reader s-uses-method-p))))
  
  (defmethod s-arrayp ((object gl-struct-slot))
    (eq (s-type object) :array))
  
negative.code:            (foreign-struct-name (hidden-symb name :foreign))
             (qualified-struct-name `(:struct ,foreign-struct-name))
             (get-ptr-name (hidden-symb name :ptr))
             (typed-populate (symb :populate- name))
             (layout (cond
                       ((string= layout :default) nil)
                       ((string= layout :std140)
                        (calc-struct-layout-from-name-type-pairs
                         name (mapcar (lambda (x)
                                        (list (s-name x) (s-type x)))
                                      slots)))
                       ((string= layout :std430)
                        (error 'std430-not-yet-implemented)))) )
        (when (validate-defstruct-g-form name slots)
          `(progn
             (eval-when (:compile-toplevel :load-toplevel :execute)
               ,(make-varjo-struct-def name slots))
             ,@(make-instance-wrapper-def name foreign-struct-name get-ptr-name
                                          slots typed-populate layout)
             ,@(when (and readers accesors)
                 (remove nil (mapcar (lambda (_)
                                       (make-slot-getter
  