diff options
Diffstat (limited to 'bindings/ocaml/llvm/llvm_ocaml.c')
-rw-r--r-- | bindings/ocaml/llvm/llvm_ocaml.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/bindings/ocaml/llvm/llvm_ocaml.c b/bindings/ocaml/llvm/llvm_ocaml.c index 7224439..d8856e7 100644 --- a/bindings/ocaml/llvm/llvm_ocaml.c +++ b/bindings/ocaml/llvm/llvm_ocaml.c @@ -668,7 +668,7 @@ CAMLprim value llvm_incoming(LLVMValueRef PhiNode) { #define Builder_val(v) (*(LLVMBuilderRef *)(Data_custom_val(v))) -void llvm_finalize_builder(value B) { +static void llvm_finalize_builder(value B) { LLVMDisposeBuilder(Builder_val(B)); } @@ -681,24 +681,29 @@ static struct custom_operations builder_ops = { custom_deserialize_default }; +static value alloc_builder(LLVMBuilderRef B) { + value V = alloc_custom(&builder_ops, sizeof(LLVMBuilderRef), 0, 1); + Builder_val(V) = B; + return V; +} + +/* unit-> llbuilder */ +CAMLprim value llvm_builder(value Unit) { + return alloc_builder(LLVMCreateBuilder()); +} + /* llvalue -> llbuilder */ CAMLprim value llvm_builder_before(LLVMValueRef Inst) { - value V; LLVMBuilderRef B = LLVMCreateBuilder(); LLVMPositionBuilderBefore(B, Inst); - V = alloc_custom(&builder_ops, sizeof(LLVMBuilderRef), 0, 1); - Builder_val(V) = B; - return V; + return alloc_builder(B); } /* llbasicblock -> llbuilder */ CAMLprim value llvm_builder_at_end(LLVMBasicBlockRef BB) { - value V; LLVMBuilderRef B = LLVMCreateBuilder(); LLVMPositionBuilderAtEnd(B, BB); - V = alloc_custom(&builder_ops, sizeof(LLVMBuilderRef), 0, 1); - Builder_val(V) = B; - return V; + return alloc_builder(B); } /* llvalue -> llbuilder -> unit */ |