[OCaml] Implement Llvm.string_of_llvalue
authorPeter Zotov <whitequark@whitequark.org>
Wed, 6 Nov 2013 09:21:08 +0000 (09:21 +0000)
committerPeter Zotov <whitequark@whitequark.org>
Wed, 6 Nov 2013 09:21:08 +0000 (09:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194136 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/ocaml/llvm/llvm.ml
bindings/ocaml/llvm/llvm.mli
bindings/ocaml/llvm/llvm_ocaml.c
test/Bindings/Ocaml/vmcore.ml

index 7096c169b4b501ff072899998f6c41ed2743b096..780e305e2fdfd3974933d87c9591b7b9784b5014 100644 (file)
@@ -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"
 
index 8ad21f20c486be8f5e501ec18f063e547d77a679..e965b7ee7e61494a74d6981ec7895124c24157c7 100644 (file)
@@ -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
index ad4b36cc2bfb36bc66ff168c0d28b33c3f686101..6134bfa6d33c3ab22df7ee15d6485f1e56419fb8 100644 (file)
@@ -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) {
index 4c119c0f7c3858405aabce66a061d0f08fa9fe96..12ac62b25519b3db5501d74a28cac16165ff8807 100644 (file)
@@ -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;