;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: ffi.lisp,v 1.27 2006-02-26 15:50:32 espen Exp $
+;; $Id: ffi.lisp,v 1.28 2006-02-26 16:12:25 espen Exp $
(in-package "GLIB")
"Returns a value which should be intepreted as unbound for slots with virtual allocation")
+#+sbcl
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ (defun sb-sizeof-bits (type)
+ (sb-alien-internals:alien-type-bits
+ (sb-alien-internals:parse-alien-type type nil)))
+
+ (defun sb-sizeof (type)
+ (/ (sb-sizeof-bits type) 8)))
+
+
;; Sizes of fundamental C types in bytes (8 bits)
-(defconstant +size-of-short+ 2)
-(defconstant +size-of-int+ 4)
-(defconstant +size-of-long+ 4)
-(defconstant +size-of-pointer+ 4)
-(defconstant +size-of-float+ 4)
-(defconstant +size-of-double+ 8)
+(defconstant +size-of-short+
+ #+sbcl (sb-sizeof 'sb-alien:short)
+ #-sbcl 2)
+(defconstant +size-of-int+
+ #+sbcl (sb-sizeof 'sb-alien:int)
+ #-sbcl 4)
+(defconstant +size-of-long+
+ #+sbcl (sb-sizeof 'sb-alien:long)
+ #-sbcl 4)
+(defconstant +size-of-pointer+
+ #+sbcl (sb-sizeof 'sb-alien:system-area-pointer)
+ #-sbcl 4)
+(defconstant +size-of-float+
+ #+sbcl (sb-sizeof 'sb-alien:float)
+ #-sbcl 4)
+(defconstant +size-of-double+
+ #+sbcl (sb-sizeof 'sb-alien:double)
+ #-sbcl 8)
+
;; Sizes of fundamental C types in bits
(defconstant +bits-of-byte+ 8)
-(defconstant +bits-of-short+ 16)
-(defconstant +bits-of-int+ 32)
-(defconstant +bits-of-long+ 32)
+(defconstant +bits-of-short+
+ #+sbcl (sb-sizeof-bits 'sb-alien:short)
+ #-sbcl 16)
+(defconstant +bits-of-int+
+ #+sbcl (sb-sizeof-bits 'sb-alien:int)
+ #-sbcl 32)
+(defconstant +bits-of-long+
+ #+sbcl (sb-sizeof-bits 'sb-alien:long)
+ #-sbcl 32)
(deftype int () '(signed-byte #.+bits-of-int+))
;; 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.47 2006-02-26 15:30:01 espen Exp $
+;; $Id: gtype.lisp,v 1.48 2006-02-26 16:12:25 espen Exp $
(in-package "GLIB")
(defbinding type-init () nil)
(type-init)
-(deftype type-number () '(unsigned 32))
+(deftype type-number () 'unsigned-long)
(deftype gtype () 'symbol)
(unwind-protect
(loop
as symbol = (let ((line (read-line (process-output process) nil)))
- (when line (subseq line 11)))
+ (when line
+ (subseq line (1+ (position #\Space line :from-end t)))))
while symbol
when (and
(> (length symbol) 9)
;; 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.36 2006-02-26 15:30:01 espen Exp $
+;; $Id: proxy.lisp,v 1.37 2006-02-26 16:12:25 espen Exp $
(in-package "GLIB")
(call-next-method))
- ;; TODO: call some C code to detect this a compile time
- (defconstant +struct-alignmen+ 4)
+ (defconstant +struct-alignmen+
+ #+sbcl (/ (sb-alien-internals:alien-type-alignment
+ (sb-alien-internals:parse-alien-type
+ 'system-area-pointer nil))
+ 8)
+ #-sbcl 4)
(defun align-offset (size)
(if (zerop (mod size +struct-alignmen+))