[python-bindings] Added code for loading a module from bitcode, getset its datalayout...
[oota-llvm.git] / bindings / python / llvm / bit_reader.py
diff --git a/bindings/python/llvm/bit_reader.py b/bindings/python/llvm/bit_reader.py
new file mode 100644 (file)
index 0000000..5bf5e22
--- /dev/null
@@ -0,0 +1,31 @@
+
+from .common import LLVMObject
+from .common import c_object_p
+from .common import get_library
+from . import enumerations
+from .core import MemoryBuffer
+from .core import Module
+from .core import OpCode
+from ctypes import POINTER
+from ctypes import byref
+from ctypes import c_char_p
+from ctypes import cast
+__all__ = ['parse_bitcode']
+lib = get_library()
+
+def parse_bitcode(mem_buffer):
+    """Input is .core.MemoryBuffer"""
+    module = c_object_p()
+    out = c_char_p(None)
+    result = lib.LLVMParseBitcode(mem_buffer, byref(module), byref(out))
+    if result:
+        raise RuntimeError('LLVM Error: %s' % out.value)
+    m = Module(module)
+    m.take_ownership(mem_buffer)
+    return m
+
+def register_library(library):
+    library.LLVMParseBitcode.argtypes = [MemoryBuffer, POINTER(c_object_p), POINTER(c_char_p)]
+    library.LLVMParseBitcode.restype = bool
+
+register_library(lib)