chiark / gitweb /
New function UPDATE-USER-DATA and some bug fixes
[clg] / glib / gboxed.lisp
index caf5fb478d8281d41be3ae7c9fd905ea7cdd4f5d..c2daeb54aaa5ce38a19ffdfe77b7f56ab24ce30e 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: gboxed.lisp,v 1.11 2004-11-06 21:39:58 espen Exp $
+;; $Id: gboxed.lisp,v 1.13 2004-11-09 10:10:59 espen Exp $
 
 (in-package "GLIB")
 
@@ -25,10 +25,17 @@ (eval-when (:compile-toplevel :load-toplevel :execute)
                          (pkg-config:pkg-variable "glib-2.0" "libdir")
                          "/libgobject-2.0.so")))
 
-(defclass boxed (proxy)
+(defclass boxed (struct)
   ()
   (:metaclass struct-class))
 
+(defmethod instance-finalizer ((instance boxed))
+  (let ((location (proxy-location instance))
+       (type-number (type-number-of instance)))
+    #'(lambda ()
+       (remove-cached-instance location)
+       (%boxed-free type-number location))))
+
 
 ;;;; Metaclass for boxed classes
 
@@ -52,19 +59,19 @@ (defmethod shared-initialize ((class boxed-class) names
     (register-type class-name type-number)))
 
 
-(defbinding %boxed-copy (type location) pointer
-  ((find-type-number type) type-number)
+(defbinding %boxed-copy () pointer
+  (type-number type-number)
   (location pointer))
 
-(defbinding %boxed-free (type location) nil
-  ((find-type-number type) type-number)
+(defbinding %boxed-free () nil
+  (type-number type-number)
   (location pointer))
 
 (defmethod reference-foreign ((class boxed-class) location)
-  (%boxed-copy (class-name class) location))
+  (%boxed-copy (find-type-number class) location))
 
 (defmethod unreference-foreign ((class boxed-class) location)
-  (%boxed-free (class-name class) location))
+  (%boxed-free (find-type-number class) location))
 
 
 ;;;;