[cffi-devel] CFFI and CLSQL

James Bielman jamesjb at jamesjb.com
Thu May 4 02:01:52 UTC 2006


"Ricardo Boccato" <boccato at gmail.com> writes:

> I am using clisp but the same error ocurred with allegro 7 (trial).
>
> Basically, issuing the command:
>
> (asdf:oos 'asdf:load-op :clsql-oracle)
>
> yields this at the debugger:
>
> APPLY: too few arguments given to #<compiled-function
>   #:|150 152 (cffi:define-foreign-type uffi-char (base-type) ...)-10-1-1|>
>    [Condition of type system::simple-program-error]

Thanks, I've pushed a fix for this to the Darcs repository.

The problem was that the CFFI::UNPARSE generic function wasn't
specialized for the parameterized UFFI-CHAR type, leading the
MAKE-LOAD-FORM method on CFFI type instances to dump the UFFI-CHAR
type without its parameter.  This leads to an error when the resulting
FASL file is loaded...

> I found out that making the following changes to the code seems to
> solve the problem...
>
> computador:~/lib/cffi$ darcs diff
> diff -rN old-cffi/uffi-compat/uffi-compat.lisp
> new-cffi/uffi-compat/uffi-compat.lisp
> 112,113c112,113
> <     (:char '(uffi-char :char))
> <     (:unsigned-char '(uffi-char :unsigned-char))
> ---
>>     (:char :char)
>>     (:unsigned-char :unsigned-char)

This will cause problems because the UFFI :char types are defined to
convert between C chars and Lisp CHARACTERs, which the CFFI :char and
:unsigned-char types do not do.

I don't think anyone has ever tried Oracle with CLISP and UFFI-COMPAT
before---with this patch it works for me now, very cool!

Thanks,
James



More information about the cffi-devel mailing list