From adef7b21168691fa570775e3a368d8dc1506a58b Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Thu, 17 Nov 2011 23:41:44 -0800 Subject: [PATCH] Adding support for list FFI values. --- tools/chibi-ffi | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/tools/chibi-ffi b/tools/chibi-ffi index 781cfd18..550bb9cd 100755 --- a/tools/chibi-ffi +++ b/tools/chibi-ffi @@ -756,17 +756,31 @@ (func-c-args func))) (define (write-actual-parameter func arg) + (define (write-value val) + (cond + ((find (lambda (x) + (and (type-array x) + (type-auto-expand? x) + (eq? val (get-array-length func x)))) + (func-c-args func)) + => (lambda (x) (cat "len" (type-index x)))) + ((assq val *types*) + (cat (or (type-struct-type val) "") " " val)) + ((list? val) + (write (car val)) + (cat + "(" + (lambda () + (cond + ((pair? (cdr val)) + (write-value (cadr val)) + (for-each (lambda (x) (display ", ") (write-value x)) (cddr val))))) + ")")) + (else + (write val)))) (cond ((and (not (type-default? arg)) (type-value arg)) - => (lambda (x) - (cond - ((find (lambda (y) - (and (type-array y) - (type-auto-expand? y) - (eq? x (get-array-length func y)))) - (func-c-args func)) - => (lambda (y) (cat "len" (type-index y)))) - (else (write x))))) + => write-value) ((or (type-result? arg) (type-array arg)) (cat (if (or (type-free? arg) (type-reference? arg) (basic-type? arg)) "&"