Added autoexport of defmethod name
[clg] / glib / gforeign.lisp
index 3ff5755..4627933 100644 (file)
@@ -15,7 +15,7 @@
 ;; License along with this library; if not, write to the Free Software
 ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-;; $Id: gforeign.lisp,v 1.8 2001-05-04 17:00:37 espen Exp $
+;; $Id: gforeign.lisp,v 1.10 2001-05-31 21:52:15 espen Exp $
 
 (in-package "GLIB")
 
@@ -54,6 +54,8 @@
 (defun find-applicable-type-method (type-spec fname &optional (error t))
   (flet ((find-superclass-method (class)
           (when class
+            (unless (class-finalized-p class)             
+              (finalize-inheritance class))
             (dolist (super (cdr (pcl::class-precedence-list class)))
               (return-if (find-type-method super fname)))))
         (find-expanded-type-method (type-spec)
     
         
 (defmacro defbinding (name lambda-list return-type-spec &rest docs/args)
-  (multiple-value-bind (c-name lisp-name)
+  (multiple-value-bind (lisp-name c-name)
       (if (atom name)
-         (values (default-alien-fname name) name)
-       (values-list name))
+         (values name (default-alien-fname name))
+       (values-list name))
+                      
     (let ((supplied-lambda-list lambda-list)
          (docs nil)
          (args nil))
        c-name lisp-name (or supplied-lambda-list (nreverse lambda-list))
        return-type-spec (reverse docs) (reverse args)))))
 
-;; For backward compatibility
-(defmacro define-foreign (&rest args)
-  `(defbinding ,@args))
-  
-
 #+cmu
 (defun %defbinding (foreign-name lisp-name lambda-list
                    return-type-spec docs args)
     (dolist (arg args)
       (destructuring-bind (var expr type-spec style) arg
        (let ((declaration (translate-type-spec type-spec))
-             (deallocation (cleanup-alien type-spec expr t)))
+             (deallocation (cleanup-alien type-spec var t)))
          (cond
           ((member style '(:out :in-out))
            (alien-types `(* ,declaration))
         ))))
 
 (deftype-method cleanup-alien string (type-spec c-string &optional weak-ref)
-  (declare (ignore type-spec))
   (when weak-ref
     (unreference-alien type-spec c-string)))