anchor.diff:  
   (defun %type-of-ginstance (location)
     (let ((class (sap-ref-sap location 0)))
  -    (type-from-number (sap-ref-unsigned class 0))))
  -
  -(deftype-method translate-from-alien
  -    ginstance (type-spec location &optional weak-ref)
  -  (declare (ignore type-spec))
  -  `(let ((location ,location))
  -     (unless (null-pointer-p location)
  -       (ensure-proxy-instance
  -	(%type-of-ginstance location) location ,weak-ref))))
  -
  +    (type-from-number (sap-ref-32 class 0))))
  +
  +(defmethod ensure-proxy-instance ((class ginstance-class) location)
  +  (declare (ignore class))
  +  (let ((class (find-class (%type-of-ginstance location))))
  +    (if class
  +	(make-instance class :location (reference-foreign class location))
  +      ;; TODO: (make-instance 'ginstance ...)
  +      location)))
   
   
   ;;;; Metaclass for subclasses of ginstance
  
positive.code: (defun type-interfaces (type)
    (multiple-value-bind (array length) (%type-interfaces type)
      (unwind-protect
  	(map-c-array 'list #'identity array 'type-number length)
        (deallocate-memory array))))
  
  (defun implements (type)
  
negative.code:      (let ((type-number (%type-from-name type)))
         (cond
  	((and (zerop type-number) error)
  	 (error "Invalid gtype name: ~A" type))
  	((zerop type-number) nil)
  	(t type-number))))
      (symbol
  