anchor.diff:  	       (defmethod get-system ((name ,name))
   		 (,get-system)))))))))
   
  -(defun gen-slot-accessors (entity needed-slots human-slot-names
  -			   gensym-slot-names body id)
  -  (let* ((name-pairs (mapcar #'list human-slot-names gensym-slot-names))
  -	 (needed (intersection name-pairs needed-slots
  -			       :test λ(eq (car _) _1)))
  -	 (human-slot-names (mapcar #'first needed))
  -	 (gensym-slot-names (mapcar #'second needed))
  -	 (gensym-func-names (mapcar λ(gensym (symbol-name _))
  -				    human-slot-names))
  -
  -	 (c-inst (gensym "component")))
  -    ;; get this component from the entity
  -    `(let* ((,c-inst (get-item-from-%component-bag-at
  -		      (entity-components ,entity) ,id)))
  -       (declare (ignorable ,c-inst))
  -       ;; make the functions to access the slots, we need this
  -       ;; as otherwise you could setf
  -       (labels ,(mapcar λ`(,_ () (,_1 ,c-inst))
  -			gensym-func-names gensym-slot-names)
  -	 (declare (ignorable
  -		   ,@(mapcar λ`(function ,_) gensym-func-names)))
  -	 ;; make symbol macros so we can use the above functions like
  -	 ;; symbols again
  -	 (symbol-macrolet ,(mapcar λ`(,_ (,_1))
  -				   human-slot-names
  -				   gensym-func-names)
  -	   ,@body)))))
  -
   (defun valid-slot-descriptions-p (slot-descriptions)
     (labels ((valid-slot (s)
   	     (destructuring-bind (name default &key type) s
  
positive.code: 	     (defmethod %get-friends ((component ,name))
  	       ',friends)
  
  	     (defun ,pass (,entity)
  	       ;; cant use our with-macro from earlier as it's not yet compiled
  	       ;; so we locally define it here and use it immediately
  	       (macrolet ((,with (,entity &body body)
  			    (gen-slot-accessors
  			     ,entity ',original-slot-names ',original-slot-names
  			     ',hidden-slot-names body ',id)))
  		 (let ((,component (%get-from ,entity)))
  		   (,with ,entity
  			  (labels ((,update (&key ,@update-args)
  				     ,@(mapcar
  					λ`(when ,(third _1)
  					    (setf (,_ ,component) ,(first _1)))
  					hidden-slot-names
  					update-args)))
  			    (declare (ignorable (function ,update)))
  			    ,@pass-body)))))
  
  	     (let ((created nil))
  	       (defun ,system-init ()
  
negative.code: 			   ,@(when (not optimize)
  				   `((:constructor ,non-optimal-init))))
  	   ,@(if optimize
  		 (mapcar λ`(,_ ,@(rest _1))
  			 slot-names
  			 slot-descriptions)
  		 `((,payload (make-instance ',payload-type)
  			     :type ,payload-type))))
  
  