Version 1.8.4: Impoved detection of long-long type for CMUCL
[uffi.git] / src / primitives.lisp
index 35c1d86ee96d18a68e49cded2f9d208e33586fd4..b7c0283b2e2a9f6d9ba0fdf729b634aa738c09d6 100644 (file)
@@ -7,9 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Feb 2002
 ;;;;
-;;;; $Id$
-;;;;
-;;;; This file, part of UFFI, is Copyright (c) 2002-2005 by Kevin M. Rosenberg
+;;;; This file, part of UFFI, is Copyright (c) 2002-2010 by Kevin M. Rosenberg
 ;;;;
 ;;;; *************************************************************************
 
@@ -98,6 +96,8 @@ supports takes advantage of this optimization."
       #-x86-64 (:unsigned-long . (alien:unsigned 32))
       #+x86-64 (:long . (alien:signed 64))
       #+x86-64 (:unsigned-long . (alien:unsigned 64))
+      (:long-long (alien:signed 64))
+      (:unsigned-long-long (alien:unsigned 64))
       (:float . alien:single-float)
       (:double . alien:double-float)
       (:void . t)
@@ -118,6 +118,8 @@ supports takes advantage of this optimization."
       #-x86-64 (:unsigned-long . (sb-alien:unsigned 32))
       #+x86-64 (:long . (sb-alien:signed 64))
       #+x86-64 (:unsigned-long . (sb-alien:unsigned 64))
+      (:long-long (sb-alien:signed 64))
+      (:unsigned-long-long (sb-alien:unsigned 64))
       (:float . sb-alien:single-float)
       (:double . sb-alien:double-float)
       (:void . t)
@@ -139,6 +141,14 @@ supports takes advantage of this optimization."
       (:unsigned-short . c-call:unsigned-short)
       (:int . alien:integer) (:unsigned-int . c-call:unsigned-int)
       (:long . c-call:long) (:unsigned-long . c-call:unsigned-long)
+      #+#.(cl:if (cl:find-symbol (cl:string '#:long-long)
+                                 (cl:string '#:c-call))
+                 '(and) '(or))
+      (:long-long . c-call:long-long)
+      #+#.(cl:if (cl:find-symbol (cl:string '#:unsigned-long-long)
+                                 (cl:string '#:c-call))
+                 '(and) '(or))
+      (:unsigned-long-long . c-call:unsigned-long-long)
       (:float . c-call:float) (:double . c-call:double)
       (:array . alien:array)))
 
@@ -156,6 +166,8 @@ supports takes advantage of this optimization."
       (:unsigned-short . sb-alien:unsigned-short)
       (:int . sb-alien:int) (:unsigned-int . sb-alien:unsigned-int)
       (:long . sb-alien:long) (:unsigned-long . sb-alien:unsigned-long)
+      (:long-long . sb-alien:long-long)
+      (:unsigned-long-long . sb-alien:unsigned-long-long)
       (:float . sb-alien:float) (:double . sb-alien:double)
       (:array . sb-alien:array)))
 
@@ -174,6 +186,9 @@ supports takes advantage of this optimization."
       (:float . :float) (:double . :double)
       (:array . :array)))
 
+#+(or allegro cormanlisp)
+(push 'uffi:no-long-long cl:*features*)
+
 #+lispworks
 (setq *type-conversion-list*
     '((* . :pointer) (:void . :void)
@@ -191,9 +206,14 @@ supports takes advantage of this optimization."
       (:unsigned-char . (:unsigned :char))
       (:int . :int) (:unsigned-int . (:unsigned :int))
       (:long . :long) (:unsigned-long . (:unsigned :long))
+      #+lispworks6 (:long-long . :int64)
+      #+lispworks6 (:unsigned-long-long . :uint64)
       (:float . :float) (:double . :double)
       (:array . :c-array)))
 
+#+(and lispworks (not lispworks6))
+(push 'uffi:no-long-long cl:*features*)
+
 #+digitool
 (setq *type-conversion-list*
      '((* . :pointer) (:void . :void)
@@ -207,6 +227,8 @@ supports takes advantage of this optimization."
        (:long . :long) (:unsigned-long . :unsigned-long)
        (:float . :single-float) (:double . :double-float)
        (:array . :array)))
+#+digitool
+(push 'uffi:no-long-long cl:*features*)
 
 #+openmcl
 (setq *type-conversion-list*