Changed the alloc argument to translate-from-alien to be one of :static, :reference...
[clg] / glib / gtype.lisp
index 87b079d..192e121 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: gtype.lisp,v 1.1 2000-08-14 16:44:34 espen Exp $
+;; $Id: gtype.lisp,v 1.3 2000-08-23 14:27:41 espen Exp $
 
 (in-package "GLIB")
 
     (declare (ignore initargs))
     (call-next-method)
 
-    ;; For some reason I can't figure out, accessors for only the
-    ;; first direct slot in an alien class gets defined by
-    ;; PCL. Therefore it has to be done here.
-    (pcl::fix-slot-accessors class (class-direct-slots class) 'pcl::add)
-    
     (when alien-name
       (setf (alien-type-name (or name (class-name class))) (first alien-name)))
     (when size
     
       ;; Reverse the direct slot definitions so the effective slots
       ;; will be in correct order.
-      (setf direct-slots (nreverse direct-slots)))
+      (setf direct-slots (reverse direct-slots))
+      ;; This nreverse caused me so much frustration that I leave it
+      ;; here just as a reminder of what not to do.
+;      (setf direct-slots (nreverse direct-slots))
+      )
     (call-next-method))
 
 
 
 (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))))
        (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