forked from OSchip/llvm-project
[clang.py] Implement Cursor.enum_type
Contributed by: Gregory Szorc <gregory.szorc@gmail.com> llvm-svn: 149830
This commit is contained in:
parent
062d2a3c89
commit
a0022e911e
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue