From 56322d632aee4be423a87d87af9dfbdec45ed9ec Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Tue, 17 Apr 2012 22:05:13 +0900 Subject: [PATCH] Supporting a (void) argument list as a synonym for (). Also adding extra checks on function definitions, and allowing running with no arguments as a filter. --- tools/chibi-ffi | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/chibi-ffi b/tools/chibi-ffi index d4604933..26a0e942 100755 --- a/tools/chibi-ffi +++ b/tools/chibi-ffi @@ -185,8 +185,12 @@ (define (parse-func func . o) (if (not (and (= 3 (length func)) - (or (identifier? (cadr func)) (list (cadr func))) - (list (caddr func)))) + (or (identifier? (cadr func)) + (and (list (cadr func)) + (<= 1 (length (cadr func)) 3) + (every (lambda (x) (or (identifier? x) (not x) (string? x))) + (cadr func)))) + (list? (caddr func)))) (error "bad function definition" func)) (let* ((method? (and (pair? o) (car o))) (ret-type (parse-type (car func))) @@ -197,7 +201,7 @@ (stub-name (if (and (pair? (cadr func)) (pair? (cddadr func))) (car (cddadr func)) (generate-stub-name scheme-name)))) - (let lp ((ls (caddr func)) + (let lp ((ls (if (equal? (caddr func) '(void)) '() (caddr func))) (i 0) (results '()) (c-args '()) @@ -1607,9 +1611,10 @@ (string-split (cadr args) #\space) #f)) (args (if cflags (cddr args) args)) - (src (car args)) + (src (if (pair? args) (car args) "/dev/stdin")) (dest (case (length args) + ((0) "-") ((1) (string-append (strip-extension src) ".c")) ((2) (cadr args)) (else (error "usage: chibi-ffi [-c] []")))))