anchor.diff:  	(delete-file outname)))))
   
   
  +(defun car-eq-p (ob1 ob2)
  +  (eq (car ob1) (car ob2)))
  +
   (defmacro init-types-in-library (system library &key prefix ignore)
  -  (let* ((filename (asdf:component-pathname (asdf:find-component (asdf:find-system system) library)))
  +  (let* ((filename (library-filename system library))
   	 (names (%find-types-in-library filename prefix ignore)))
       `(progn
  -       ,@(mapcar #'(lambda (name)
  -		     `(progn
  -			(defbinding (,(intern name) ,name) () type-number)
  -			(,(intern name))
  -			(pushnew ',(intern name) *type-initializers*)))
  -		 names))))
  +       ,@(mapcar 
  +	  #'(lambda (name)	      
  +	      `(progn
  +		 (defbinding (,(intern name) ,name) () type-number)
  +		 (,(intern name))
  +		 (pushnew (cons ',(intern name) ,filename) *type-initializers* 
  +		  :test #'car-eq-p)))
  +	  names))))
   
   (defun find-type-init-function (type-number)
     (loop
  -   for type-init in *type-initializers*
  +   for (type-init) in *type-initializers*
      when (= type-number (funcall type-init))
      do (return type-init)))
   
  
positive.code: (defun type-from-glib-name (name)
    (type-from-number (type-number-from-glib-name name) t))
  
  (defun register-type (type id)
    (cond
     ((find-type-number type))
     ((not id) (warn "Can't register type with no foreign id: ~A" type))
     (t    
      (pushnew (cons type id) *registered-types* :key #'car)
  
negative.code: 
  (eval-when (:compile-toplevel :load-toplevel :execute)
    (defvar *type-initializers* ())
  
    (defun library-filename (system library)
    (let ((component (asdf:find-component (asdf:find-system system) library)))
      (etypecase component
        (asdf:shared-object 
         (first (asdf:output-files (make-instance 'asdf:compile-op) component)))
        (asdf:library (asdf:component-pathname component)))))
  
    (defun %find-types-in-library (pathname prefixes ignore)
      (let ((outname (tmpname "types")))
        (unwind-protect
  