1 USING: accessors alien.c-types alien.syntax assocs destructors
2 kernel llvm.core llvm.engine llvm.wrappers namespaces ;
10 : empty-engine ( -- engine )
11 "initial-module" <module> [
18 jit new empty-engine >>ee H{ } clone >>mps ;
20 : (remove-functions) ( function -- )
21 thejit get ee>> value>> over LLVMFreeMachineCodeForFunction
22 LLVMGetNextFunction dup ALIEN: 0 = [ drop ] [ (remove-functions) ] if ;
24 : remove-functions ( module -- )
25 ! free machine code for each function in module
26 LLVMGetFirstFunction dup ALIEN: 0 = [ drop ] [ (remove-functions) ] if ;
28 : (remove-provider) ( provider -- )
29 thejit get ee>> value>> swap value>> f <void*> f <void*>
30 [ LLVMRemoveModuleProvider drop ] 2keep *void* [ llvm-throw ] when*
31 *void* module new swap >>value
32 [ value>> remove-functions ] with-disposal ;
34 : remove-provider ( name -- )
35 dup thejit get mps>> at [
37 thejit get mps>> delete-at
40 : add-provider ( provider name -- )
42 thejit get ee>> value>> pick value>> LLVMAddModuleProvider
43 [ t >>disposed ] dip thejit get mps>> set-at ;
45 thejit [ <jit> ] initialize