;;;; bind.scm (module bind (bind bind* bind-type bind-file bind-file* bind-opaque-type bind-rename bind-rename/pattern bind-options bind-include-path) (import scheme (chicken base) (chicken foreign) (chicken syntax)) (begin-for-syntax (import bind-translator) (import (chicken io)) (import srfi-1) (import srfi-13) (define emitted-prelude #f) (define prelude #<string (strip-syntax f))) (else (syntax-error 'bind-file "invalid filename" f))))) (with-input-from-file fname read-string))) (define-syntax bind-file (er-macro-transformer (lambda (x r c) `(,(r 'bind) ,@(map bind:read-file (cdr x)))))) (define-syntax bind-file* (er-macro-transformer (lambda (x r c) `(,(r 'bind*) ,@(map bind:read-file (cdr x)))))) (define-syntax bind-include-path (er-macro-transformer (lambda (x r c) (set! ffi-include-path-list (append (cdr x) ffi-include-path-list)) `(,(r 'void) ) ) )) (define-syntax bind-type (er-macro-transformer (lambda (x r c) (parse-type-declaration (cdr x) r)))) (define-syntax bind-opaque-type (er-macro-transformer (lambda (x r c) (parse-opaque-type-declaration (cdr x) r)))) (define-syntax bind-options (er-macro-transformer (lambda (x r c) (apply set-bind-options (strip-syntax (cdr x))) `(,(r 'void))))) (define-syntax bind-rename (er-macro-transformer (lambda (x r c) (if (= 2 (length (cdr x))) (apply set-renaming (strip-syntax (cdr x))) (syntax-error 'bind-rename "bad number of arguments" x)) `(,(r 'void))))) (define-syntax bind-rename/pattern (er-macro-transformer (lambda (x r c) (if (= 2 (length (cdr x))) (apply set-renaming (append (strip-syntax (cdr x)) '(regex: #t))) (syntax-error 'bind-rename "bad number of arguments" x)) `(,(r 'void))))) )