[python-bindings] Added bindings for LLVMContextRef and a test for creating a new...
authorMichael Gottesman <mgottesman@apple.com>
Wed, 11 Sep 2013 00:23:10 +0000 (00:23 +0000)
committerMichael Gottesman <mgottesman@apple.com>
Wed, 11 Sep 2013 00:23:10 +0000 (00:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190457 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/python/llvm/core.py
bindings/python/llvm/tests/test_core.py

index 74be0ab5525797b0ca0474e44854efec6ab25739..76d1b14e6312b877b9d4cd74ef294dd88f099d9f 100644 (file)
@@ -20,6 +20,7 @@ from ctypes import c_char_p
 __all__ = [
     "lib",
     "MemoryBuffer",
+    "Context",
     "PassRegistry"
 ]
 
@@ -87,6 +88,19 @@ class MemoryBuffer(LLVMObject):
     def __len__(self):
         return lib.LLVMGetBufferSize(self)
 
+class Context(LLVMObject):
+
+    def __init__(self, context=None):
+        if context is None:
+            context = lib.LLVMContextCreate()
+            LLVMObject.__init__(self, context, disposer=lib.LLVMContextDispose)
+        else:
+            LLVMObject.__init__(self, context)
+
+    @classmethod
+    def GetGlobalContext(cls):
+        return Context(lib.LLVMGetGlobalContext())
+
 class PassRegistry(LLVMObject):
     """Represents an opaque pass registry object."""
 
@@ -139,6 +153,16 @@ def register_library(library):
     library.LLVMGetGlobalPassRegistry.argtypes = []
     library.LLVMGetGlobalPassRegistry.restype = c_object_p
 
+    # Context declarations.
+    library.LLVMContextCreate.argtypes = []
+    library.LLVMContextCreate.restype = c_object_p
+
+    library.LLVMContextDispose.argtypes = [Context]
+    library.LLVMContextDispose.restype = None
+
+    library.LLVMGetGlobalContext.argtypes = []
+    library.LLVMGetGlobalContext.restype = c_object_p
+
     # Memory buffer declarations
     library.LLVMCreateMemoryBufferWithContentsOfFile.argtypes = [c_char_p,
             POINTER(c_object_p), POINTER(c_char_p)]
@@ -153,6 +177,7 @@ def register_enumerations():
         OpCode.register(name, value)
 
 def initialize_llvm():
+    c = Context.GetGlobalContext()
     p = PassRegistry()
     lib.LLVMInitializeCore(p)
     lib.LLVMInitializeTransformUtils(p)
index 3fdaf455fd405a667a8390ba59ca71fdc0ec44ed..3364a66cb55759801111af0f5892f71f3d2f09d6 100644 (file)
@@ -2,6 +2,7 @@ from .base import TestBase
 from ..core import OpCode
 from ..core import MemoryBuffer
 from ..core import PassRegistry
+from ..core import Context
 
 class TestCore(TestBase):
     def test_opcode(self):
@@ -29,3 +30,6 @@ class TestCore(TestBase):
 
     def test_create_passregistry(self):
         PassRegistry()
+
+    def test_create_context(self):
+        Context.GetGlobalContext()