chiark / gitweb /
Changes required by SBCL 0.9.8
authorespen <espen>
Wed, 8 Feb 2006 21:43:33 +0000 (21:43 +0000)
committerespen <espen>
Wed, 8 Feb 2006 21:43:33 +0000 (21:43 +0000)
glib/defpackage.lisp
glib/glib.asd
glib/proxy.lisp

index e203371313fb910707afe15fbfcbac4339feffa7..df02f476d1f04d2eec0b63aa737cf50b2103de5b 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: defpackage.lisp,v 1.8 2006/02/01 14:16:06 espen Exp $
+;; $Id: defpackage.lisp,v 1.9 2006/02/08 21:43:33 espen Exp $
 
 ;(export 'kernel::type-expand-1 "KERNEL")
 
@@ -36,7 +36,7 @@ (defpackage "GLIB"
           "READER-FUNCTION" "WRITER-FUNCTION" "BOUNDP-FUNCTION" 
           "INITIALIZE-INTERNAL-SLOT-FUNCTIONS" "COMPUTE-SLOT-ACCESSOR-INFO"
           "COMPUTE-EFFECTIVE-SLOT-DEFINITION-INITARGS"
-          "INITIALIZE-INTERNAL-SLOT-GFS")
+          #-sbcl>=0.9.8"INITIALIZE-INTERNAL-SLOT-GFS")
   #+sbcl(:import-from "SB-EXT" "COLLECT")
   #+cmu(:import-from "ALIEN" "CALLBACK")
   (:import-from #+cmu"ALIEN" #+sbcl"SB-ALIEN" 
index 7c6bbb20e29b75be4b6937139f2129602c79d55d..668c59b70c8a96205d31e2b715892f5cc673849a 100644 (file)
 (when (string>= (pkg-version "glib-2.0") "2.8.0")
   (push :glib2.8 *features*))
 
+#+sbcl
+(when (string>= (lisp-implementation-version) "0.9.8")
+  (push :sbcl>=0.9.8 *features*))
+
 (defsystem glib
     :depends-on (clg-tools)
     :components ((:file "defpackage")
index fb7801105f9a5d542b204332e6cf23b8caf05cd6..4aeaa4c6314c06de3b240c79409f8d3025275edf 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: proxy.lisp,v 1.29 2006/02/07 13:20:39 espen Exp $
+;; $Id: proxy.lisp,v 1.30 2006/02/08 21:43:33 espen Exp $
 
 (in-package "GLIB")
 
@@ -183,7 +183,7 @@ (defmethod initialize-internal-slot-functions ((slotd effective-virtual-slot-def
                     (slot-definition-type slotd))))
                 (funcall writer (foreign-location object) value)))))))))
 
-  (initialize-internal-slot-gfs (slot-definition-name slotd)))
+  #-sbcl>=0.9.8(initialize-internal-slot-gfs (slot-definition-name slotd)))
 
 
 
@@ -345,7 +345,6 @@ (defmethod invalidate-instance ((instance proxy))
 
 (defgeneric most-specific-proxy-superclass (class))
 (defgeneric direct-proxy-superclass (class))
-(defgeneric compute-foreign-size (class))
   
 
 (eval-when (:compile-toplevel :load-toplevel :execute)
@@ -418,9 +417,6 @@   (defmethod initialize-internal-slot-functions ((slotd effective-alien-slot-def
 
     (call-next-method))
   
-  (defmethod compute-foreign-size ((class proxy-class))
-    nil)
-
   ;; TODO: call some C code to detect this a compile time
   (defconstant +struct-alignmen+ 4)
 
@@ -448,12 +444,6 @@   (defmethod compute-slots ((class proxy-class))
        do (setf (slot-value slotd 'offset) offset))))
     (call-next-method))
 
-  (defmethod compute-slots :after ((class proxy-class))
-    (when (and (class-finalized-p class) (not (slot-boundp class 'size)))
-      (let ((size (compute-foreign-size class)))
-       (when size 
-         (setf (slot-value class 'size) size)))))
-  
   (defmethod validate-superclass ((class proxy-class) (super standard-class))
     (subtypep (class-name super) 'proxy))
   
@@ -602,14 +592,19 @@ (defmethod reference-foreign ((class struct-class) location)
 (defmethod unreference-foreign ((class struct-class) location)
   (deallocate-memory location))
 
-(defmethod compute-foreign-size ((class struct-class))
-  (let ((size (loop
-              for slotd in (class-slots class)
-              when (eq (slot-definition-allocation slotd) :alien)
-              maximize (+ 
-                        (slot-definition-offset slotd)
-                        (size-of (slot-definition-type slotd))))))
-    (+ size (mod size +struct-alignmen+))))
+(defmethod compute-slots :around ((class struct-class))
+    (let ((slots (call-next-method)))
+      (when (and 
+            #-sbcl>=0.9.8(class-finalized-p class) #+sbc098 t
+            (not (slot-boundp class 'size)))
+        (let ((size (loop
+                    for slotd in slots
+                    when (eq (slot-definition-allocation slotd) :alien)
+                    maximize (+ 
+                              (slot-definition-offset slotd)
+                              (size-of (slot-definition-type slotd))))))
+         (setf (slot-value class 'size) (+ size (mod size +struct-alignmen+)))))
+      slots))
 
 (defmethod reader-function ((class struct-class) &rest args)
   (declare (ignore args))