+ (let ((names (%find-types-in-library filename prefix ignore)))
+ `(progn
+ ,@(mapcar #'(lambda (name)
+ `(progn
+ (defbinding (,(intern name) ,name) () type-number)
+ (,(intern name))))
+ names))))
+
+
+
+;;;; Metaclass for subclasses of ginstance
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ (defclass ginstance-class (proxy-class)
+ ()))
+
+
+(defmethod shared-initialize ((class ginstance-class) names
+ &rest initargs &key name alien-name)
+ (declare (ignore names))
+ (let* ((class-name (or name (class-name class)))
+ (type-number
+ (find-type-number
+ (or (first alien-name) (default-alien-type-name class-name)) t)))
+ (register-type class-name type-number)
+ (if (getf initargs :size)
+ (call-next-method)
+ (let ((size (type-instance-size type-number)))
+ (apply #'call-next-method class names :size (list size) initargs)))))