On Wed, Dec 23, 2009 at 4:07 AM, Matt Lamari <matt.lam...@gmail.com> wrote: > > Sorry for the late response. > > I don't have the code/opportunity to test all the cases; but wonder if > the enclosed patch - touching all the #+lispworks-64bit, is what's > really needed. . . ?
Well, could you tell me whether my previous patch works for you and why you need this one? > I.e. every 64-bit replaced with (or lispworks5.1 lispworks-64bit) > or the like > > > > > Luís Oliveira wrote: >> On Thu, Nov 19, 2009 at 5:33 PM, Matt Lamari <matt.lam...@gmail.com> wrote: >> >>> (defcfun test :int64) >>> >> [...] >> >>> The long-long gets through and fails in the lispworks-specific "Ecase" >>> (that has them removed for non-64-bit lispworks). >>> >> >> Long-long emulation is not implemented for DEFCFUN, DEFCALLBACK, etc. >> It turns out that Lispworks does in fact support long-long on 32-bit >> platforms for DEFCFUN at least. Please let me know if the attached >> patch works for you. >> >> > > > --- cffi-lispworks.lisp 2009-06-16 11:20:08.000000000 -0500 > +++ c:\t\cffi-lispworks.lisp 2009-12-22 22:04:10.350220400 -0600 > @@ -62,7 +62,7 @@ > > ;;;# Misfeatures > > -#-lispworks-64bit (pushnew 'no-long-long *features*) > +#-(or lispworks5.1 lispworks-64bit) (pushnew 'no-long-long *features*) > > ;;;# Symbol Case > > @@ -156,9 +156,9 @@ > (:unsigned-int '(:unsigned :int)) > (:long :long) > (:unsigned-long '(:unsigned :long)) > - #+lispworks-64bit > + #+(or lispworks5.1 lispworks-64bit) > (:long-long '(:long :long)) > - #+lispworks-64bit > + #+(or lispworks5.1 lispworks-64bit) > (:unsigned-long-long '(:unsigned :long :long)) > (:float :float) > (:double :double) > @@ -170,10 +170,10 @@ > #+#.(cl:if (cl:find-symbol "FOREIGN-TYPED-AREF" "FLI") '(and) '(or)) > (defun convert-foreign-typed-aref-type (cffi-type) > (ecase cffi-type > - ((:char :short :int :long #+lispworks-64bit :long-long) > + ((:char :short :int :long #+(or lispworks5.1 lispworks-64bit) :long-long) > `(signed-byte ,(* 8 (%foreign-type-size cffi-type)))) > ((:unsigned-char :unsigned-short :unsigned-int :unsigned-long > - #+lispworks-64bit :unsigned-long-long) > + #+(or lispworks5.1 lispworks-64bit) :unsigned-long-long) > `(unsigned-byte ,(* 8 (%foreign-type-size cffi-type)))) > (:float 'single-float) > (:double 'double-float))) > @@ -186,7 +186,7 @@ > > ;; Lispworks 5.0 on 64-bit platforms doesn't have [u]int64 support in > ;; FOREIGN-TYPED-AREF. That was implemented in 5.1. > -#+(and lispworks-64bit lispworks5.0) > +#+(and (or lispworks5.1 lispworks-64bit) lispworks5.0) > (defun 64-bit-type-p (type) > (member type '(:long :unsigned-long :long-long :unsigned-long-long))) > > @@ -196,7 +196,7 @@ > (define-compiler-macro %mem-ref (&whole form ptr type &optional (off 0)) > (if (constantp type) > (let ((type (eval type))) > - (if (or #+(and lispworks-64bit lispworks5.0) (64-bit-type-p type) > + (if (or #+(and (or lispworks5.1 lispworks-64bit) lispworks5.0) > (64-bit-type-p type) > (eql type :pointer)) > (let ((fli-type (convert-foreign-type type)) > (ptr-form (if (eql off 0) ptr `(inc-pointer ,ptr ,off)))) > @@ -230,7 +230,7 @@ > (if (constantp type) > (once-only (val) > (let ((type (eval type))) > - (if (or #+(and lispworks-64bit lispworks5.0) (64-bit-type-p type) > + (if (or #+(and (or lispworks5.1 lispworks-64bit) lispworks5.0) > (64-bit-type-p type) > (eql type :pointer)) > (let ((fli-type (convert-foreign-type type)) > (ptr-form (if (eql off 0) ptr `(inc-pointer ,ptr ,off)))) > > -- Luís Oliveira http://r42.eu/~luis/ _______________________________________________ cffi-devel mailing list cffi-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel