anchor.diff:  ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   
  -;; $Id: proxy.lisp,v 1.4 2006-08-16 12:09:03 espen Exp $
  +;; $Id: proxy.lisp,v 1.5 2006-09-29 13:14:19 espen Exp $
   
   (in-package "GFFI")
   
  
positive.code:     #'(lambda ()
  	(funcall unref location))))
  
  ;; FINALIZE-P should always be given the same value as the keyword
  ;; argument :FINALZIE given to MAKE-PROXY-INSTANCE or non NIL if the
  ;; proxy was created with MAKE-INSTANCE
  (defmethod invalidate-instance ((instance proxy) &optional finalize-p)
    (remove-cached-instance (foreign-location instance))
    #+(or sbcl cmu)
    (progn
      (when finalize-p
        (funcall (instance-finalizer instance)))
      (slot-makunbound instance 'location)
      (cancel-finalization instance))
    ;; We can't cache invalidated instances in CLISP beacuse it is
    ;; not possible to cancel finalization
  
negative.code: (defgeneric invalidate-instance (instance &optional finalize-p))
  (defgeneric allocate-foreign (object &key &allow-other-keys))
  
  #?-(or (sbcl>= 0 9 17) (featurep :clisp))
  (progn
    (defun foreign-location (instance)
      (slot-value instance '%location))
  
    (defun (setf foreign-location) (location instance)
      (setf (slot-value instance '%location) location))
    
    (defun proxy-valid-p (instance)
      (slot-boundp instance '%location)))
    
  #?(or (sbcl>= 0 9 17) (featurep :clisp))
  (progn
    (defun foreign-location (instance)
      (gethash instance *foreign-instance-locations*))
  
    (defun (setf foreign-location) (location instance)
      (setf (gethash instance *foreign-instance-locations*) location))
  
    (defun proxy-valid-p (instance)
      (and (gethash instance *foreign-instance-locations*) t)))
  
  
  (defmethod reference-function ((name symbol))
    (reference-function (find-class name)))
  