On Thu, 22 Dec 2005 10:14:38 +0000, =?ISO-8859-1?Q?Lu=EDs_Oliveira?= luismbo@gmail.com said:
Luís> This tutorial shows the usefulness of foreign-funcall for C functions Luís> with varargs. Lispworks unfortunately doesn't export this Luís> functionality. Martin, I wonder if Lispworks will ever export Luís> something like this or if we could have some clues on how to use Luís> unexported functionality to implement cffi-sys:%foreign-funcall (and Luís> eventually cffi-sys:%foreign-funcall-pointer).
No, LispWorks doesn't support that kind of call with random run-time types. The problem is that some of the low level calling conventions are very baroque in which registers they use to pass the arguments, so supporting a call pattern with run-time types is too complicated. Defining a small number of FLI:DEFINE-FOREIGN-FUNCTION wrappers for the same C function with specific types has sufficed so far in our cases.
You can get some of the functionality by using the :ONE-OF type in LispWorks, but you can't use it to mix float, non-float and aggregate types for the same value. LispWorks also has FLI:DEFINE-FOREIGN-FUNCALLABLE for creating specific "FUNCALL" functions to allow calling of function pointers.