diff options
author | Tobias Grosser <grosser@fim.uni-passau.de> | 2012-02-05 11:42:20 +0000 |
---|---|---|
committer | Tobias Grosser <grosser@fim.uni-passau.de> | 2012-02-05 11:42:20 +0000 |
commit | 28d939ffd6877f8a2c6a5b6704df792319f3878e (patch) | |
tree | 660bc5a486dc04baa54382536f477a923cc4ff77 /bindings/python | |
parent | 250d217586b0dafcb0be343a80da31c956258e2e (diff) |
[clang.py] Implement Cursor.underlying_typedef_type
Contributed by: Gregory Szorc <gregory.szorc@gmail.com>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149829 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings/python')
-rw-r--r-- | bindings/python/clang/cindex.py | 18 | ||||
-rw-r--r-- | 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 37ff5ffd4e..4c819c26fe 100644 --- a/bindings/python/clang/cindex.py +++ b/bindings/python/clang/cindex.py @@ -982,6 +982,19 @@ class Cursor(Structure): return self._type @property + def underlying_typedef_type(self): + """Return the underlying type of a typedef declaration. + + Returns a type for the typedef this cursor is a declaration for. If + the current cursor is not a typedef, this raises. + """ + if not hasattr(self, '_underlying_type'): + assert self.kind.is_declaration() + self._underlying_type = Cursor_underlying_type(self) + + return self._underlying_type + + @property def hash(self): """Returns a hash of the cursor as an int.""" if not hasattr(self, '_hash'): @@ -1800,6 +1813,11 @@ 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_visit_callback = CFUNCTYPE(c_int, Cursor, Cursor, py_object) Cursor_visit = lib.clang_visitChildren Cursor_visit.argtypes = [Cursor, Cursor_visit_callback, py_object] diff --git a/bindings/python/tests/cindex/test_cursor.py b/bindings/python/tests/cindex/test_cursor.py index efcede9015..d86830334d 100644 --- a/bindings/python/tests/cindex/test_cursor.py +++ b/bindings/python/tests/cindex/test_cursor.py @@ -62,3 +62,18 @@ def test_get_children(): assert tu_nodes[2].spelling == 'f0' assert tu_nodes[2].displayname == 'f0(int, int)' assert tu_nodes[2].is_definition() == True + +def test_underlying_type(): + source = 'typedef int foo;' + 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 == 'foo': + typedef = cursor + break + + assert typedef.kind.is_declaration() + underlying = typedef.underlying_typedef_type + assert underlying.kind == TypeKind.INT |