Adding bindings for memory buffers and module providers. Switching
[oota-llvm.git] / bindings / ocaml / llvm / llvm.ml
index d9ef2d3af373b34006c84dec3e0bccebb81bab21..58d9d5013e0419f8acab7d95c6e1af39bdb8cfdb 100644 (file)
@@ -14,6 +14,8 @@ type lltypehandle
 type llvalue
 type llbasicblock
 type llbuilder
+type llmoduleprovider
+type llmemorybuffer
 
 type type_kind =
   Void_type
@@ -83,6 +85,11 @@ type real_predicate =
 | Fcmp_une
 | Fcmp_true
 
+exception IoError of string
+
+external register_exns : exn -> unit = "llvm_register_core_exns"
+let _ = register_exns (IoError "")
+
 
 (*===-- Modules -----------------------------------------------------------===*)
 
@@ -143,11 +150,14 @@ external is_packed : lltype -> bool = "llvm_is_packed"
 
 (*--... Operations on pointer, vector, and array types .....................--*)
 external array_type : lltype -> int -> lltype = "llvm_array_type"
-external pointer_type : lltype -> lltype = "LLVMPointerType"
+external pointer_type : lltype -> lltype = "llvm_pointer_type"
+external qualified_pointer_type : lltype -> int -> lltype
+                                = "llvm_qualified_pointer_type"
 external vector_type : lltype -> int -> lltype = "llvm_vector_type"
 
 external element_type : lltype -> lltype = "LLVMGetElementType"
 external array_length : lltype -> int = "llvm_array_length"
+external address_space : lltype -> int = "llvm_address_space"
 external vector_size : lltype -> int = "llvm_vector_size"
 
 (*--... Operations on other types ..........................................--*)
@@ -427,6 +437,24 @@ external build_shufflevector : llvalue -> llvalue -> llvalue -> string ->
                                llbuilder -> llvalue = "llvm_build_shufflevector"
 
 
+(*===-- Module providers --------------------------------------------------===*)
+
+module ModuleProvider = struct
+  external create : llmodule -> llmoduleprovider
+                  = "LLVMCreateModuleProviderForExistingModule"
+  external dispose : llmoduleprovider -> unit = "llvm_dispose_module_provider"
+end
+  
+
+(*===-- Memory buffers ----------------------------------------------------===*)
+
+module MemoryBuffer = struct
+  external of_file : string -> llmemorybuffer = "llvm_memorybuffer_of_file"
+  external of_stdin : unit -> llmemorybuffer = "llvm_memorybuffer_of_stdin"
+  external dispose : llmemorybuffer -> unit = "llvm_memorybuffer_dispose"
+end
+
+
 (*===-- Non-Externs -------------------------------------------------------===*)
 (* These functions are built using the externals, so must be declared late.   *)