[cffi-devel] CFFI problem in Lispworks 5.1 32-bit with :long-long emulation

Matt Lamari matt.lamari at gmail.com
Thu Nov 19 17:33:34 UTC 2009


The problem manifests itself while trying to compile the latest
CL-SQLite; but can be replicated with:

(defcfun test :int64)

Error: :LONG-LONG fell through ECASE expression.
Wanted one of (:CHAR :UNSIGNED-CHAR :SHORT :UNSIGNED-SHORT :INT
:UNSIGNED-INT :LONG :UNSIGNED-LONG :FLOAT :DOUBLE :POINTER :VOID).
  1 (abort) Return to level 0.
  2 Return to top loop level 0.

The long-long gets through and fails in the lispworks-specific "Ecase"
(that has them removed for non-64-bit lispworks).

It looks as though something higher up is meant to filter/emulate this.

There seems to be emulation code in types.lisp

The :long-long comes from the method

(defmethod canonicalize ((tp emulated-llong)) :long-long)

But somehow this :long-long proliferates down all the way to the
lispworks-specific code.

By the way, and I don't know if this is relevant; but (fli:size-of
'(:long :long :int)) returns 8 in this Lispworks - I mention it only as
someone on #lisp asked me to try it.

How should I proceed?

Thanks,
Matt







More information about the cffi-devel mailing list