;; 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")
(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)))