diff options
author | Jonathan Coe <jbcoe@me.com> | 2018-04-22 20:51:05 +0000 |
---|---|---|
committer | Jonathan Coe <jbcoe@me.com> | 2018-04-22 20:51:05 +0000 |
commit | 578fe177d467bfbd0814de83814575111b493bda (patch) | |
tree | 1a01c99f18d480e10abf5cb8d2b24a6b54a23fa4 /clang/bindings | |
parent | 87ba905fe96469c65767f28bab4893ad32e15c02 (diff) |
[python bindings] Fix Cursor.result_type for ObjC method declarations - Bug 36677
Summary:
In cindex.py, Cursor.result_type called into the wrong libclang
function, causing cursors for ObjC method declarations to return invalid
result types. Fixes Bug 36677.
Reviewers: jbcoe, rsmith
Reviewed By: jbcoe
Subscribers: cfe-commits, llvm-commits
Differential Revision: https://reviews.llvm.org/D45671
Patch by kjteske (Kyle Teske).
llvm-svn: 330557
Diffstat (limited to 'clang/bindings')
-rw-r--r-- | clang/bindings/python/clang/cindex.py | 7 | ||||
-rw-r--r-- | clang/bindings/python/tests/cindex/test_cursor.py | 12 |
2 files changed, 18 insertions, 1 deletions
diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py index 043b5fb37d84..06fc79950e78 100644 --- a/clang/bindings/python/clang/cindex.py +++ b/clang/bindings/python/clang/cindex.py @@ -1644,7 +1644,7 @@ class Cursor(Structure): def result_type(self): """Retrieve the Type of the result for this Cursor.""" if not hasattr(self, '_result_type'): - self._result_type = conf.lib.clang_getResultType(self.type) + self._result_type = conf.lib.clang_getCursorResultType(self) return self._result_type @@ -3568,6 +3568,11 @@ functionList = [ [Cursor, c_uint, c_uint], SourceRange), + ("clang_getCursorResultType", + [Cursor], + Type, + Type.from_result), + ("clang_getCursorSemanticParent", [Cursor], Cursor, diff --git a/clang/bindings/python/tests/cindex/test_cursor.py b/clang/bindings/python/tests/cindex/test_cursor.py index c2a4eb57d02f..2575ffb8a51c 100644 --- a/clang/bindings/python/tests/cindex/test_cursor.py +++ b/clang/bindings/python/tests/cindex/test_cursor.py @@ -429,6 +429,18 @@ class TestCursor(unittest.TestCase): t = foo.result_type self.assertEqual(t.kind, TypeKind.INT) + def test_result_type_objc_method_decl(self): + code = """\ + @interface Interface : NSObject + -(void)voidMethod; + @end + """ + tu = get_tu(code, lang='objc') + cursor = get_cursor(tu, 'voidMethod') + result_type = cursor.result_type + self.assertEqual(cursor.kind, CursorKind.OBJC_INSTANCE_METHOD_DECL) + self.assertEqual(result_type.kind, TypeKind.VOID) + def test_availability(self): tu = get_tu('class A { A(A const&) = delete; };', lang='cpp') |