summaryrefslogtreecommitdiff
path: root/bindings
diff options
context:
space:
mode:
authorGordon Henriksen <gordonhenriksen@mac.com>2007-12-26 21:21:51 +0000
committerGordon Henriksen <gordonhenriksen@mac.com>2007-12-26 21:21:51 +0000
commita09a89983bf51aa70d3067282e4817ec3057eb51 (patch)
treed253b979e4f90c7ba52dc268a5d479530c5a881a /bindings
parent8d2a922814d58a99b592c5844f87048d935812b4 (diff)
downloadllvm-a09a89983bf51aa70d3067282e4817ec3057eb51.tar.gz
llvm-a09a89983bf51aa70d3067282e4817ec3057eb51.tar.bz2
llvm-a09a89983bf51aa70d3067282e4817ec3057eb51.tar.xz
Adding an uninitialized builder constructor to the Ocaml bindings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45362 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings')
-rw-r--r--bindings/ocaml/llvm/llvm.ml2
-rw-r--r--bindings/ocaml/llvm/llvm.mli6
-rw-r--r--bindings/ocaml/llvm/llvm_ocaml.c23
3 files changed, 22 insertions, 9 deletions
diff --git a/bindings/ocaml/llvm/llvm.ml b/bindings/ocaml/llvm/llvm.ml
index ef63e137b3..b5d1d3df82 100644
--- a/bindings/ocaml/llvm/llvm.ml
+++ b/bindings/ocaml/llvm/llvm.ml
@@ -327,6 +327,8 @@ external incoming : llvalue -> (llvalue * llbasicblock) list = "llvm_incoming"
(*===-- Instruction builders ----------------------------------------------===*)
+external builder: unit-> llbuilder
+ = "llvm_builder"
external builder_before : llvalue -> llbuilder = "llvm_builder_before"
external builder_at_end : llbasicblock -> llbuilder = "llvm_builder_at_end"
external position_before : llvalue -> llbuilder -> unit = "llvm_position_before"
diff --git a/bindings/ocaml/llvm/llvm.mli b/bindings/ocaml/llvm/llvm.mli
index 22d359181c..8d9d21261d 100644
--- a/bindings/ocaml/llvm/llvm.mli
+++ b/bindings/ocaml/llvm/llvm.mli
@@ -847,6 +847,12 @@ external incoming : llvalue -> (llvalue * llbasicblock) list = "llvm_incoming"
(*===-- Instruction builders ----------------------------------------------===*)
+(** [builder] creates an instruction builder with no position. It is invalid to
+ use this builder until its position is set with [position_before] or
+ [position_at_end]. See the constructor for [llvm::LLVMBuilder]. **)
+external builder: unit-> llbuilder
+ = "llvm_builder"
+
(** [builder_before ins] creates an instruction builder positioned before the
instruction [isn]. See the constructor for [llvm::LLVMBuilder]. **)
external builder_before : llvalue -> llbuilder = "llvm_builder_before"
diff --git a/bindings/ocaml/llvm/llvm_ocaml.c b/bindings/ocaml/llvm/llvm_ocaml.c
index 7224439feb..d8856e74e4 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 */