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.
This commit is contained in:
Alex Shinn 2012-04-17 22:05:13 +09:00
parent f30e53265c
commit 56322d632a

View file

@ -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] <file.stub> [<output.c>]")))))