chiark / gitweb /
Remove around method for SIGNAL-CONNECT
[clg] / glib / gtype.lisp
index 478cab674a1a7a2855bb46fadcfa5b39fb2c15e2..2b4a2d0625129cfcf117b6951f67b965232ef7fc 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: gtype.lisp,v 1.12 2001-10-21 21:50:18 espen Exp $
+;; $Id: gtype.lisp,v 1.16 2002-03-24 12:56:03 espen Exp $
 
 (in-package "GLIB")
 
@@ -121,7 +121,7 @@ (defun init-type (init)
 
 (defun %init-types-in-library (pathname ignore)
   (let ((process (ext:run-program
-                 "nm" (list (namestring (truename pathname)))
+                 "nm" (list "-D" (namestring (truename pathname)))
                  :output :stream :wait nil))
        (fnames ()))
     (labels ((read-symbols ()
@@ -137,8 +137,9 @@ (defun %init-types-in-library (pathname ignore)
       (ext:process-close process)
       `(init-type ',fnames))))
 
-(defmacro init-types-in-library (pathname &key ignore)
-  (%init-types-in-library pathname ignore))
+(defmacro init-types-in-library (filename &key ignore)
+  (%init-types-in-library
+   (format nil "~A/~A" *gtk-library-path* filename) ignore))
 
 
 
@@ -243,6 +244,19 @@ (defbinding type-parent (type) type-number
 (defun supertype (type)
   (type-from-number (type-parent type)))
 
+(defbinding %type-interfaces (type) pointer
+  ((find-type-number type t) type-number)
+  (n-interfaces unsigned-int :out))
+
+(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)
+  (mapcar #'type-from-number (type-interfaces type)))
+
 (defun type-hierarchy (type)
   (let ((type-number (find-type-number type t)))
     (unless (= type-number 0)
@@ -287,7 +301,8 @@ (defun %sort-types-topologicaly (unsorted)
   (let ((sorted ()))
     (loop while unsorted do
       (dolist (type unsorted)
-       (let ((dependencies (rest (type-hierarchy type))))
+       (let ((dependencies
+              (append (rest (type-hierarchy type)) (type-interfaces type))))
          (cond
           ((null dependencies)
            (push type sorted)
@@ -317,7 +332,11 @@ (defun expand-type-definitions (prefix &optional args)
                   #'(lambda (options)
                       (and
                        (string-prefix-p (first options) name)
-                       (getf (cdr options) :ignore-prefix)))
+                       (getf (cdr options) :ignore-prefix)
+                       (not (some
+                             #'(lambda (exception)
+                                 (string= name exception))
+                             (getf (cdr options) :except)))))
                   args))))
           (find-types prefix))))