X-Git-Url: https://git.distorted.org.uk/~mdw/clg/blobdiff_plain/7aa7bd2715582b5d2fdc6aa651804c7b430876ca..9b61afaa64dc9a50e1d242e297af1c211be72926:/glib/gtype.lisp diff --git a/glib/gtype.lisp b/glib/gtype.lisp index fb6d739..cc09744 100644 --- a/glib/gtype.lisp +++ b/glib/gtype.lisp @@ -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.2 2000-08-15 14:42:34 espen Exp $ +;; $Id: gtype.lisp,v 1.5 2000-10-01 17:20:43 espen Exp $ (in-package "GLIB") @@ -234,7 +234,11 @@ (deftype-method translate-type-spec alien-instance (type-spec) (declare (ignore type-spec)) - 'system-area-pointer) + (translate-type-spec 'pointer)) + +(deftype-method size-of alien-instance (type-spec) + (declare (ignore type-spec)) + (size-of 'pointer)) @@ -360,7 +364,7 @@ (alien::make-heap-alien-info :type (alien::parse-alien-type `(function - void ,alien-type system-area-pointer)) + void system-area-pointer ,alien-type)) :sap-form (system:foreign-symbol-address writer)))) (to-alien (get-to-alien-function type)) (cleanup (get-cleanup-function type))) @@ -469,7 +473,8 @@ (deftype-method translate-from-alien alien-object (type-spec location &optional alloc) - (declare (ignore alloc)) + ;; Reference counted objects are always treated as if alloc were :reference + (declare (ignore alloc)) `(let ((location ,location)) (unless (null-pointer-p location) (ensure-alien-instance ',type-spec location)))) @@ -536,16 +541,17 @@ (alien-instance-location object)))) (deftype-method translate-from-alien - alien-structure (type-spec location &optional (alloc :dynamic)) + alien-structure (type-spec location &optional (alloc :reference)) `(let ((location ,location)) (unless (null-pointer-p location) ,(ecase alloc - (:dynamic `(ensure-alien-instance ',type-spec location)) + (:copy `(ensure-alien-instance ',type-spec location)) (:static `(ensure-alien-instance ',type-spec location :static t)) - (:copy `(ensure-alien-instance - ',type-spec - `(,(alien-copier type-spec) - location ,(alien-class-size (find-class type-spec))))))))) + (:reference + `(ensure-alien-instance + ',type-spec + (,(alien-copier type-spec) + location ,(alien-class-size (find-class type-spec))))))))) (deftype-method cleanup-alien alien-structure (type-spec sap &optional copied) (when copied