anchor.diff:               (name (if (eq name :main) :main name))
                (returns (returns body-obj))
                (type (if (eq name :main) '(:void nil nil) 
  -                       (code-type body-obj))))
  +                       (first returns))))
           (let ((name (safe-gl-name name)))
  -          (if (or (not returns) (every (equalp! type) returns)) 
  +          (format t "~s ~s" name returns)
  +          (if (or (not returns) (loop for r in returns always (equal r (first returns))))
                 (make-instance 
                  'code :type type
                  :current-line nil
  
positive.code:         (error "The result of the test must be a bool.~%~a"
                 (code-type test)))))
  
  (vdefspecial for (var-form condition update &rest body)
    "(for (a 0) (< a 10) (++ a)
       (* a 2))"
  
negative.code:                                          collect (current-line j))
                                        (to-block last-arg)))))))))
  
  ;; [TODO] why does this need semicolon?
  (vdefspecial return (&optional (form '(%void)))
    (let ((ob (varjo->glsl form)))
      (if (eq :none (code-type ob))
          ob
          (merge-obs ob
                     :current-line (format nil "return ~a;" 
                                           (current-line ob))
                     :type :none
                     :returns (list (code-type ob))))))
  