/ llvm / orc.scm
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))