anchor.diff:  
   ;; [TODO] should this always copy the arg-objs?
   (defun basic-arg-matchp (func arg-types arg-objs)
  -  (print "basic match")
     (let ((spec-types (v-argument-spec func)))
       (if (loop :for a :in arg-types :for s :in spec-types :always (v-typep a s))
           (list 0 func arg-objs)
  
positive.code:           (error () nil)))))
  
  (defun glsl-arg-matchp (func arg-types arg-objs)
    (print "spec match")
    (let* ((spec-types (v-argument-spec func))
           (spec-generics (positions-if #'v-spec-typep spec-types))
           (g-dim (when spec-generics 
  
negative.code: ;;
  ;; {IMPORTANT NOTE} IF YOU CHANGE ONE-^^^^, CHANGE THE OTHER-vvvvv
  ;;
  ;;[TODO] split each case into a different macro and use this as core
  ;;[TODO] use make-func-spec so we have only one place where the spec
  ;;       is defined, this will lower the number of errors once we start
  ;;       editting things in the future
  (defmacro v-defun (name args &body body)
    (let* ((context-pos (position '&context args :test #'symbol-name-equal))
           (context (when context-pos (subseq args (1+ context-pos))))
  