anchor.diff:  
   ;;; Surfaces
   
  +(defgeneric user-data (surface key))
  +(defgeneric (setf user-data) (value surface key))
  +
   (defmethod make-proxy-instance :around ((class surface-class) location 
   					&rest initargs)
     (let ((class (find-class (%surface-get-type location))))
  
positive.code: (defbinding %surface-destroy () nil
    (location pointer))
  
  (defmethod reference-function ((class surface-class))
    (declare (ignore class))
    #'%surface-reference)
  
negative.code:   (declare (ignore class))
    #'%surface-destroy)
  
  (defbinding %surface-set-user-data (surface key data-id) status-signal
    (surface pointer)
    ((quark-intern key) pointer-data)
    (data-id pointer-data)
  