Work around for broken def-type-method
[clg] / glib / gtype.lisp
index 7f9fd55..866b437 100644 (file)
@@ -20,7 +20,7 @@
 ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-;; $Id: gtype.lisp,v 1.43 2006-02-08 21:53:34 espen Exp $
+;; $Id: gtype.lisp,v 1.46 2006-02-19 22:25:31 espen Exp $
 
 (in-package "GLIB")
 
 
 (defvar *registered-types* ())
 (defvar *registered-type-aliases* ())
+(defvar *registered-static-types* ())
 (defvar *lisp-type-to-type-number* (make-hash-table))
 (defvar *type-number-to-lisp-type* (make-hash-table))
 
              parent-number
              (or foreign-name (default-alien-type-name type))
              (make-instance 'type-info :class-size class-size :instance-size instance-size))))
-       (setf (gethash type *lisp-type-to-type-number*) type-number)
-       (setf (gethash type-number *type-number-to-lisp-type*) type)
-       type-number))))
+       (pushnew (list type parent foreign-name) *registered-static-types* :key #'car)
+       (setf (gethash type *lisp-type-to-type-number*) type-number)
+       (setf (gethash type-number *type-number-to-lisp-type*) type)
+       type-number))))
 
 
 
   ;; A ginstance should never be invalidated since it is ref counted
   nil)
 
+(defmethod callback-from-alien-form (form (class ginstance-class) &rest args)
+  (declare (ignore args))
+  (from-alien-form form class))
+
 (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."))