[cffi-devel] Validate auto-generated wrappers

Hi, I wrote a quick swig hack to parse c files and generate cffi headers. I will appreciate if you can verify them, and suggest me how can I improve the auto-generated headers, or if you can give me some test cases. Disclaimer: I am not very familiar with cffi, so if I am making any obvious mistakes please point out. The C input file: ----------------------------------------------------------- char *s; }; struct cfunr * cfun (int i,char *s,struct cfunr * r,int a[10]) { int j; struct cfunr * r2; printf("i = %d\n", i); printf("s = %s\n", s); printf("r->x = %d\n", r->x); printf("r->s = %s\n", r->s); for (j = 0; j < 10; j++) printf("a[%d] = %d.\n", j, a[j]); r2 = (struct cfunr *) malloc (sizeof (struct cfunr)); r2->x = i+5; r2->s = "A C string"; return r2; } void* lispsort_function(int); void lispsort_double (int n, double * array) { double * sorted_array; int i; lispsort_begin(n); /* store #'sort2 in lispsort_function */ sorted_array = ((double * (*) (double *)) lispsort_function) (array); for (i = 0; i < n; i++) array[i] = sorted_array[i]; free(sorted_array); } void test(float x , double y); } --------------------------------------------------------------------- _The auto-generated lisp file (indentation and spacing fixed)_ --------------------------------------------------------------------------- ;; This is an automatically generated file. ;;Make changes as you feel are necessary (but remember if you try to regenerate this file, your changes will be lost). (defpackage :test (:use :common-lisp :cffi) (:export :max :acbdsqr_ :make-bar :bar-x :bar-y :bar-a :bar-b :bar-z :bar-n :my_struct :make-foo :foo-a :foo-b :pointer_func :make-div_t :div_t-quot :div_t-rem :func123 :func1234 :make-cfunr :cfunr-x :cfunr-s :cfun :lispsort_function :lispsort_double :test)) (in-package :test) (defconstant max 1000) (defcfun ("acbdsqr_" acbdsqr_) :void (xyz :pointer)) (defcstruct bar (x :short) (y :short) (a :char) (b :char) (z :pointer) (n :pointer)) (def-c-var ("my_struct" my_struct) :pointer) (defcstruct foo (a :int) (b :pointer)) (defcfun ("pointer_func" pointer_func) :int (ClosureFun :pointer) (y :int)) (defcstruct div_t (quot :int) (rem :int)) (defcfun ("func123" func123) :int (x :pointer) (z :pointer) (y :pointer)) (defcfun ("func1234" func1234) :void (x :pointer)) (defcstruct cfunr (x :int) (s :string)) (defcfun ("cfun" cfun) :pointer (i :int) (s :string) (r :pointer) (a :pointer)) (defcfun ("lispsort_function" lispsort_function) :pointer (arg0 :int)) (defcfun ("lispsort_double" lispsort_double) :void (n :int) (array :pointer)) (defcfun ("test" test) :void (x :float) (y :double)) ---------------------------------------------------------------- -- Surendra Singhi http://www.public.asu.edu/~sksinghi/index.html The best-laid plans of mice and men go oft astray.

On 2005-dec-14, at 09:49, Surendra Singhi wrote:
Hi, I wrote a quick swig hack to parse c files and generate cffi headers. I will appreciate if you can verify them, and suggest me how can I improve the auto-generated headers, or if you can give me some test cases.
I suppose that verrazano's tests would be a good challenge.
The C input file:
Hmm... the file seems incomplete. [...]
(def-c-var ("my_struct" my_struct) :pointer)
def-c-var -> defcvar
(defcfun ("pointer_func" pointer_func) :int (ClosureFun :pointer) (y :int))
If you omit the lisp name, CFFI will make the C name slightly more lispy. In this case, (defcfun "pointer_func" ...) would generate the lisp function POINTER-FUNC. -- Luís Oliveira http://student.dei.uc.pt/~lmoliv/ Equipa Portuguesa do Translation Project http://www.iro.umontreal.ca/translation/registry.cgi?team=pt
participants (2)
-
Luís Oliveira
-
Surendra Singhi