X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=bindings%2Focaml%2Fllvm%2Fllvm_ocaml.c;h=d8856e74e4d75daadb778f9ef5f128ce9f8fad5c;hp=7224439feba988b9559dafb647bafdd8d6e25305;hb=a09a89983bf51aa70d3067282e4817ec3057eb51;hpb=8d2a922814d58a99b592c5844f87048d935812b4 diff --git a/bindings/ocaml/llvm/llvm_ocaml.c b/bindings/ocaml/llvm/llvm_ocaml.c index 7224439feba..d8856e74e4d 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 */