---
 bindings/python/clang/cindex.py             |   18 ++++++++++++++++++
 bindings/python/tests/cindex/test_cursor.py |   15 +++++++++++++++
 2 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py
index ecbf42e..1472792 100644
--- a/bindings/python/clang/cindex.py
+++ b/bindings/python/clang/cindex.py
@@ -990,16 +990,29 @@ class Cursor(Structure):
         """
         if not hasattr(self, '_underlying_type'):
             assert self.kind.is_declaration()
             self._underlying_type = Cursor_underlying_type(self)
 
         return self._underlying_type
 
     @property
+    def enum_type(self):
+        """Return the integer type of an enum declaration.
+
+        Returns a Type corresponding to an integer. If the cursor is not for an
+        enum, this raises.
+        """
+        if not hasattr(self, '_enum_type'):
+            assert self.kind == CursorKind.ENUM_DECL
+            self._enum_type = Cursor_enum_type(self)
+
+        return self._enum_type
+
+    @property
     def hash(self):
         """Returns a hash of the cursor as an int."""
         if not hasattr(self, '_hash'):
             self._hash = Cursor_hash(self)
 
         return self._hash
 
     def get_children(self):
@@ -1813,16 +1826,21 @@ Cursor_type.argtypes = [Cursor]
 Cursor_type.restype = Type
 Cursor_type.errcheck = Type.from_result
 
 Cursor_underlying_type = lib.clang_getTypedefDeclUnderlyingType
 Cursor_underlying_type.argtypes = [Cursor]
 Cursor_underlying_type.restype = Type
 Cursor_underlying_type.errcheck = Type.from_result
 
+Cursor_enum_type = lib.clang_getEnumDeclIntegerType
+Cursor_enum_type.argtypes = [Cursor]
+Cursor_enum_type.restype = Type
+Cursor_enum_type.errcheck = Type.from_result
+
 Cursor_visit_callback = CFUNCTYPE(c_int, Cursor, Cursor, py_object)
 Cursor_visit = lib.clang_visitChildren
 Cursor_visit.argtypes = [Cursor, Cursor_visit_callback, py_object]
 Cursor_visit.restype = c_uint
 
 # Type Functions
 Type_get_canonical = lib.clang_getCanonicalType
 Type_get_canonical.argtypes = [Type]
diff --git a/bindings/python/tests/cindex/test_cursor.py b/bindings/python/tests/cindex/test_cursor.py
index d868303..71ee0c5 100644
--- a/bindings/python/tests/cindex/test_cursor.py
+++ b/bindings/python/tests/cindex/test_cursor.py
@@ -72,8 +72,23 @@ def test_underlying_type():
     for cursor in tu.cursor.get_children():
         if cursor.spelling == 'foo':
             typedef = cursor
             break
 
     assert typedef.kind.is_declaration()
     underlying = typedef.underlying_typedef_type
     assert underlying.kind == TypeKind.INT
+
+def test_enum_type():
+    source = 'enum TEST { FOO=1, BAR=2 };'
+    index = Index.create()
+    tu = index.parse('test.c', unsaved_files=[('test.c', source)])
+    assert tu is not None
+
+    for cursor in tu.cursor.get_children():
+        if cursor.spelling == 'TEST':
+            enum = cursor
+            break
+
+    assert enum.kind == CursorKind.ENUM_DECL
+    enum_type = enum.enum_type
+    assert enum_type.kind == TypeKind.UINT
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to