orc.scm
1 (define-module (llvm orc) 2 #:use-module ((rnrs base) #:select (assert)) 3 #:use-module (llvm error) 4 #:use-module (system foreign) 5 #:use-module (oop goops) 6 #:use-module (llvm types) 7 #:use-module (llvm utils) 8 #:use-module (llvm type) 9 #:use-module (llvm module) 10 #:use-module (llvm context) 11 #:use-module (llvm raw) 12 #:export (orc-create-thread-safe-context 13 orc-thread-safe-context-get-context 14 orc-create-thread-safe-module)) 15 16 (define (orc-create-thread-safe-context) 17 (wrap-llvm-orc-thread-safe-context 18 (LLVMOrcCreateNewThreadSafeContext))) 19 (define (orc-thread-safe-context-get-context tsc) 20 (assert (llvm-orc-thread-safe-context? tsc)) 21 (let ((noe (wrap-llvm-context 22 (LLVMOrcThreadSafeContextGetContext 23 (unwrap-llvm-orc-thread-safe-context 24 tsc))))) 25 (assert (eq? noe (slot-ref tsc 'context))) 26 noe 27 ) 28 29 ) 30 31 ;; (define-once tsm->module (make-weak-value-hash-table)) 32 33 (define (orc-create-thread-safe-module m tss-ctx) 34 (let ((ret (wrap-llvm-orc-thread-safe-module 35 (LLVMOrcCreateNewThreadSafeModule 36 (unwrap-llvm-module m) 37 38 (unwrap-llvm-orc-thread-safe-context 39 tss-ctx))))) 40 (slot-set! ret 'module m) 41 ;; (hash-set! tsm->module m ret) 42 ;; (hash-set! tsm->module tss-ctx ret) 43 ret))