X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fprimitives.lisp;h=fbfc120c2d732625e8f7e820ed14ea3d0652628f;hb=3e1ab6ebfcf56e76edffaff284aca937e8152408;hp=c430894f711922ace55c007c5e25b1e660128575;hpb=6f682746787779a2475eec53d7d46efab891b392;p=uffi.git diff --git a/src/primitives.lisp b/src/primitives.lisp index c430894..fbfc120 100644 --- a/src/primitives.lisp +++ b/src/primitives.lisp @@ -277,6 +277,15 @@ supports takes advantage of this optimization." (let ((result (%convert-from-uffi-type type context))) (cond ((atom result) result) + ;; Arrays without size are really pointers to type on SBCL/CMUCL + #+sbcl + ((and (consp type) (= 2 (length type)) (eq :array (car type))) + (setf (car result) 'sb-alien:*) + result) + #+cmu + ((and (consp type) (= 2 (length type)) (eq :array (car type))) + (setf (car result) 'alien:*) + result) #+openmcl ((eq (car result) :address) (if (eq context :struct) @@ -286,9 +295,20 @@ supports takes advantage of this optimization." ((and (eq (car result) :pointer) (eq context :allocation) :pointer)) (t result)))) +(eval-when (:compile-toplevel :load-toplevel :execute) + (when (char= #\a (schar (symbol-name '#:a) 0)) + (pushnew :uffi-lowercase-reader *features*)) + (when (not (string= (symbol-name '#:a) + (symbol-name '#:A))) + (pushnew :uffi-case-sensitive *features*))) (defun make-lisp-name (name) (let ((converted (substitute #\- #\_ name))) (intern - #+case-sensitive converted - #-case-sensitive (string-upcase converted)))) + #+uffi-case-sensitive converted + #+(and (not uffi-lowercase-reader) (not uffi-case-sensitive)) (string-upcase converted) + #+(and uffi-lowercase-reader (not uffi-case-sensitive)) (string-downcase converted)))) + +(eval-when (:compile-toplevel :load-toplevel :execute) + (setq cl:*features* (delete :uffi-lowercase-reader *features*)) + (setq cl:*features* (delete :uffi-case-sensitive *features*)))