r9396: add ensure-char-storage function, new tests
[uffi.git] / src / objects.lisp
index f154990cef415047cc7aadb1cf46aed85b0d5961..940c941cc42f6d09338c22f90b8bc0d9e45949e0 100644 (file)
@@ -128,25 +128,21 @@ an array of TYPE with size SIZE. The TYPE parameter is evaluated."
 #+mcl
 (defsetf deref-pointer deref-pointer-set)
 
-#+lispworks
 (defmacro ensure-char-character (obj)
+  #+(or (and mcl (not openmcl))) obj
+  #+(or allegro cmu sbcl scl openmcl) `(code-char ,obj)
+  ;; lispworks varies whether deref'ing array vs. slot access of a char
+  #+lispworks
   `(if (characterp ,obj) ,obj (code-char ,obj)))
-
-#+(and mcl (not openmcl)) 
-(defmacro ensure-char-character (obj)
-  obj)
-
-#+(or allegro cmu sbcl scl openmcl)
-(defmacro ensure-char-character (obj)
-  `(code-char ,obj))
   
-#+(or lispworks (and mcl (not openmcl)))
 (defmacro ensure-char-integer (obj)
- `(char-code ,obj))
+  #+(or (and mcl (not openmcl))) `(char-code ,obj)
+  #+(or allegro cmu sbcl scl openmcl) obj
+  `(if (characterp ,obj) (char-code ,obj) ,obj))
 
-#+(or allegro cmu sbcl scl openmcl)
-(defmacro ensure-char-integer (obj)
-  obj)
+(defmacro ensure-char-storable (obj)
+  #+(or lispworks (and mcl (not openmcl))) obj
+  #+(or allegro cmu sbcl scl openmcl) `(char-code ,obj))
 
 (defmacro pointer-address (obj)
   #+(or cmu scl)