From: Peter Zotov Date: Wed, 6 Nov 2013 09:21:08 +0000 (+0000) Subject: [OCaml] Implement Llvm.string_of_llvalue X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ba0c7cd012b064e2d8009480f9ae6f7d75e00e13;p=oota-llvm.git [OCaml] Implement Llvm.string_of_llvalue git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194136 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/bindings/ocaml/llvm/llvm.ml b/bindings/ocaml/llvm/llvm.ml index 7096c169b4b..780e305e2fd 100644 --- a/bindings/ocaml/llvm/llvm.ml +++ b/bindings/ocaml/llvm/llvm.ml @@ -382,6 +382,7 @@ external type_of : llvalue -> lltype = "llvm_type_of" external value_name : llvalue -> string = "llvm_value_name" external set_value_name : string -> llvalue -> unit = "llvm_set_value_name" external dump_value : llvalue -> unit = "llvm_dump_value" +external string_of_llvalue : llvalue -> string = "llvm_string_of_llvalue" external replace_all_uses_with : llvalue -> llvalue -> unit = "llvm_replace_all_uses_with" diff --git a/bindings/ocaml/llvm/llvm.mli b/bindings/ocaml/llvm/llvm.mli index 8ad21f20c48..e965b7ee7e6 100644 --- a/bindings/ocaml/llvm/llvm.mli +++ b/bindings/ocaml/llvm/llvm.mli @@ -654,6 +654,9 @@ val set_value_name : string -> llvalue -> unit error. See the method [llvm::Value::dump]. *) val dump_value : llvalue -> unit +(** [string_of_llvalue v] returns a string describing the value [v]. *) +val string_of_llvalue : llvalue -> string + (** [replace_all_uses_with old new] replaces all uses of the value [old] with the value [new]. See the method [llvm::Value::replaceAllUsesWith]. *) val replace_all_uses_with : llvalue -> llvalue -> unit diff --git a/bindings/ocaml/llvm/llvm_ocaml.c b/bindings/ocaml/llvm/llvm_ocaml.c index ad4b36cc2bf..6134bfa6d33 100644 --- a/bindings/ocaml/llvm/llvm_ocaml.c +++ b/bindings/ocaml/llvm/llvm_ocaml.c @@ -527,6 +527,17 @@ CAMLprim value llvm_dump_value(LLVMValueRef Val) { return Val_unit; } +/* llvalue -> string */ +CAMLprim value llvm_string_of_llvalue(LLVMTypeRef M) { + char* TypeCStr; + TypeCStr = LLVMPrintValueToString(M); + + value TypeStr = caml_copy_string(TypeCStr); + LLVMDisposeMessage(TypeCStr); + + return TypeStr; +} + /* llvalue -> llvalue -> unit */ CAMLprim value llvm_replace_all_uses_with(LLVMValueRef OldVal, LLVMValueRef NewVal) { diff --git a/test/Bindings/Ocaml/vmcore.ml b/test/Bindings/Ocaml/vmcore.ml index 4c119c0f7c3..12ac62b2551 100644 --- a/test/Bindings/Ocaml/vmcore.ml +++ b/test/Bindings/Ocaml/vmcore.ml @@ -67,6 +67,14 @@ let filename = Sys.argv.(1) let m = create_module context filename +(*===-- Conversion --------------------------------------------------------===*) + +let test_conversion () = + insist ("i32" = (string_of_lltype i32_type)); + let c = const_int i32_type 42 in + insist ("i32 42" = (string_of_llvalue c)) + + (*===-- Target ------------------------------------------------------------===*) let test_target () = @@ -1392,6 +1400,7 @@ let test_writer () = (*===-- Driver ------------------------------------------------------------===*) let _ = + suite "conversion" test_conversion; suite "target" test_target; suite "constants" test_constants; suite "global values" test_global_values;