anchor.diff:              fields)))
   
   (defun %struct-make (name fields options)
  -  (with (sym (%struct-make-symbol name options)
  -		 g (gensym)
  -         user-init (%struct-make-init fields g)
  -	     type-init `((= (aref ,g 0) 'struct
  -                        (aref ,g 1) ',name)))
  +  (with (sym        (%struct-make-symbol name options)
  +		 g          (gensym)
  +         user-init  (%struct-make-init fields g)
  +	     type-init  `((= (aref ,g 0) 'struct
  +                         (aref ,g 1) ',name)))
       `(defun ,sym ,(%struct-make-args fields)
          (let ,g (make-array ,(+ 2 (length fields)))
            ,@(? user-init
  
positive.code: 
  (defun %struct-sort-fields (fields-and-options)
    (with-queue (fields options)
      (map [? (& (cons? _) (%struct-option-keyword? _.))
  	        (enqueue options _)
  	        (enqueue fields _)]
  	     fields-and-options)
      (values (queue-list fields) (queue-list options))))
  
  (defvar *struct-defs*)
  
  
negative.code:   (carlist (%struct-def name)))
  
  (defun %defstruct-expander (name &rest fields-and-options)
    (with ((fields options) (%struct-sort-fields fields-and-options))
      (%struct-add-def name fields)
      `(progn
         (declare-cps-exception ,name)
         ,(%struct-make name fields options)
         ,(%struct? name)
         ,@(%struct-getters name fields)
         (defmacro ,($ "WITH-" name) (s &body body)
  		 `(with-struct ,name ,,s
              ,,@body))
  