[clang.py] Implement Cursor.enum_type

Contributed by: Gregory Szorc <gregory.szorc@gmail.com>

llvm-svn: 149830
This commit is contained in:
Tobias Grosser 2012-02-05 11:42:25 +00:00
parent 062d2a3c89
commit a0022e911e
2 changed files with 33 additions and 0 deletions

View File

@ -994,6 +994,19 @@ class Cursor(Structure):
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."""
@ -1818,6 +1831,11 @@ 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]

View File

@ -77,3 +77,18 @@ def test_underlying_type():
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