anchor.diff:           -1)
           (t 1)))
   
  +(defmacro compare-pairs (&rest pairs)
  +  "Call compare-num on each pair of arguments, but short-circuit and return the value if the result
  +  of the comparison is not 0."
  +  (if (null pairs)
  +      0
  +      (destructuring-bind (a b &rest rest-args)
  +          pairs
  +        (let ((result (gensym)))
  +          `(let ((,result (compare-num ,a ,b)))
  +             (if (zerop ,result)
  +                 (compare-pairs ,@rest-args)
  +                 ,result))))))
  +
   (defun compare-gl-objects (obj1 obj2)
     (cond ((eq obj1 obj2)
            0)
  
positive.code:   (gl:depth-range (near element) (far element)))
  
  (defmethod glstate-compare ((e1 gl-depth-range) (e2 gl-depth-range))
    (let ((comp1 (compare-num (near e1) (near e2))))
      (if (zerop comp1)
          (compare-num (far e1) (far e2))
          comp1)))
  
  (defmethod make-default-glstate-member ((name (eql 'glstate-depth-range)))
    (make-instance 'gl-depth-range))
  
  (defclass gl-cull-face ()
    ((face :accessor face)))
  
negative.code:     '(#+nil :render-target
        :program
        :texunits
        :blend-func
        :blend-equation
        :blend-color
        :cull-face
        :depth-func
        :depth-range
  