anchor.diff:                     (concatenate 'string result (subseq glsl-string last))))
                  ;;
                  (swap-out-args (glsl-string)
  -                 (let ((in-args (input-variables stage)))
  +                 (let ((input-variables (input-variables stage)))
                      (loop :for out :in out-vars
  -                      :for in :in in-args
  +                      :for in :in input-variables
                         :for out-glsl-name := (glsl-name out)
                         :for in-glsl-name := (glsl-name in)
                         :do (setf glsl-string (swap-out-arg glsl-string
  
positive.code: 
  ;;----------------------------------------------------------------------
  
  (defgeneric in-args-compatiblep (in-args last-out-vars)
    ;;
    (:method ((in-args list) (last-out-vars list))
      (and (= (length in-args) (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)))
  
  (defun %suitable-qualifiersp (out-arg in-arg)
    (let ((out-qual (qualifiers out-arg)))
  
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))
  