id) '(paren_close . paren_close)) '()) (('(paren_open . paren_open) rest ...) (do-args rest)) (x (error (format #f "invalid arglist syntax: ~A" (map cdr x)))))) (define do-command (match-lambda (('cname ('id . name)) (set! *c-function-name* (texi-quote (symbol->string name)))) (('fname ('string . name) ...) (set! *function-name* (texi-quote (apply string-append name)))) (('type ('id . type)) (set! *snarf-type* type)) (('type ('int . num)) (set! *snarf-type* num)) (('location ('string . file) ('int . line)) (set! *file* file) (set! *line* line)) (('arglist rest ...) (set! *args* (do-arglist rest))) (('argsig ('int . req) ('int . opt) ('int . var)) (set! *sig* (list req opt var))) (x (error (format #f "unknown doc attribute: ~A" x))))) (define do-directive (match-lambda ((('id . command) rest ...) (do-command (cons command rest))) ((('string . string) ...) (set! *docstring* string)) (x (error (format #f "unknown doc attribute syntax: ~A" x))))) (do-directive l)) (define (process-singleline l) (define do-argpos (match-lambda ((('id . name) ('int . pos) ('int . line)) (let ((idx (list-index *args* name))) (when idx (unless (= (+ idx 1) pos) (display (format #f "~A:~A: wrong position for argument ~A: ~A (should be ~A)\n" *file* line name pos (+ idx 1)) (current-error-port)))))) (x #f))) (define do-command (match-lambda (('(id . argpos) rest ...) (do-argpos rest)) (x (error (format #f "unknown check: ~A" x))))) (when *function-name* (do-command l))) (define main snarf-check-and-output-texi)