(define-interface ffi-tools-rts-interface (export (lookup-shared-value :syntax) make-finite-type-import-function)) (define-structure ffi-tools-rts ffi-tools-rts-interface (open scheme srfi-23 external-calls) (begin (define-syntax lookup-shared-value (syntax-rules () ((lookup-shared-value %s) (shared-binding-ref (lookup-imported-binding %s))))) (define (make-finite-type-alist elements id-proc) (map (lambda (e) (cons (id-proc e) e)) (vector->list elements))) (define (make-finite-type-import-function finite-type-name elements id-proc) (let ((alist (make-finite-type-alist elements id-proc))) (lambda (id) (cond ((assoc id alist) => cdr) (else (error "Could not map value to finite type " finite-type-name id)))))) ))