anchor.diff:  
   ;;----------------------------------------------------------------------
   
  -(defgeneric in-args-compatiblep (in-args last-out-vars)
  +(defgeneric input-variables-compatiblep (input-variables last-out-vars)
     ;;
  -  (:method ((in-args list) (last-out-vars list))
  -    (and (= (length in-args) (length last-out-vars)))
  +  (:method ((input-variables list) (last-out-vars list))
  +    (and (= (length input-variables) (length last-out-vars)))
       (every (lambda (out in)
                (and (v-type-eq (v-type-of out) (v-type-of in))
                     (%suitable-qualifiersp out in)))
  -           last-out-vars in-args)))
  +           last-out-vars input-variables)))
   
   (defun %suitable-qualifiersp (out-arg in-arg)
     (let ((out-qual (qualifiers out-arg)))
  
positive.code:             (assert (eq in-prim out-prim) () 'primitives-dont-match
                      :out-stage (type-of last-stage) :out out-prim
                      :in-stage (type-of stage) :in in-prim)))
          ;; we need to modify the result of the compiled stage if the in-args
          ;; names dont match the names of the out args
          (let* ((glsl-code (glsl-code stage))
                 (glsl-code (swap-out-args glsl-code))
  
negative.code:              stage
               :previous-stage previous-stage
               :input-variables
               (if (and (input-variables-compatiblep in-vars out-vars)
                        (uniforms-compatiblep (uniform-variables stage)
                                              (uniform-variables previous-stage))
                        (context-compatiblep stage previous-stage))
  