[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).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@330557 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jonathan Coe 2018-04-22 20:51:05 +00:00
parent 67f6e8a2d2
commit 33a33e52ed
2 changed files with 18 additions and 1 deletions

View File

@ -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,

View File

@ -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')