X-Git-Url: https://git.distorted.org.uk/~mdw/clg/blobdiff_plain/e74cfcab32b6d3328acdad68b4acc087c6375fb6..637525325db34a2c4e4de288711d97bb84adffee:/glib/gtype.lisp diff --git a/glib/gtype.lisp b/glib/gtype.lisp index c674a21..165c06e 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.20 2004-11-13 16:37:09 espen Exp $ +;; $Id: gtype.lisp,v 1.23 2005-01-12 13:33:06 espen Exp $ (in-package "GLIB") @@ -48,12 +48,12 @@ (defmethod from-alien-form (type-number (type (eql 'gtype)) &rest args) (declare (ignore type args)) - `(type-from-number ,type-number t)) + `(type-from-number ,type-number)) (defmethod from-alien-function ((type (eql 'gtype)) &rest args) (declare (ignore type args)) #'(lambda (type-number) - (type-from-number type-number t))) + (type-from-number type-number))) (defmethod writer-function ((type (eql 'gtype)) &rest args) (declare (ignore type)) @@ -65,7 +65,7 @@ (declare (ignore type)) (let ((reader (reader-function 'type-number))) #'(lambda (location &optional (offset 0)) - (type-from-number (funcall reader location offset) t)))) + (type-from-number (funcall reader location offset))))) (eval-when (:compile-toplevel :load-toplevel :execute) @@ -147,7 +147,7 @@ (etypecase name (string (type-from-number (find-type-number name t))))) -(defbinding (find-type-name "g_type_name") (type) string +(defbinding (find-type-name "g_type_name") (type) (copy-of string) ((find-type-number type t) type-number)) (defun type-number-of (object) @@ -203,6 +203,19 @@ ;; TODO: (make-instance 'ginstance ...) location))) +(defmethod copy-from-alien-form (location (class ginstance-class) &rest args) + (declare (ignore location class args)) + (error "Doing copy-from-alien on a ref. counted class is most certainly an error, but if it really is what you want you should use REFERENCE-FOREIGN on the returned instance instead.")) + +(defmethod copy-from-alien-function ((class ginstance-class) &rest args) + (declare (ignore class args)) + (error "Doing copy-from-alien on a ref. counted class is most certainly an error, but if it really is what you want you should use REFERENCE-FOREIGN on the returned instance instead.")) + +(defmethod reader-function ((class ginstance-class) &rest args) + (declare (ignore args)) + #'(lambda (location &optional (offset 0)) + (ensure-proxy-instance class (sap-ref-sap location offset)))) + ;;;; Metaclass for subclasses of ginstance @@ -231,6 +244,7 @@ ;;;; Registering fundamental types +(register-type 'nil "void") (register-type 'pointer "gpointer") (register-type 'char "gchar") (register-type 'unsigned-char "guchar") @@ -242,6 +256,7 @@ (register-type 'unsigned-long "gulong") (register-type 'single-float "gfloat") (register-type 'double-float "gdouble") +(register-type 'pathname "gchararray") (register-type 'string "gchararray")