summaryrefslogtreecommitdiff
path: root/bindings
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2015-10-12 03:10:20 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2015-10-12 03:10:20 +0000
commita64c1a092a34df4af2ee0e9c4c69c1fee16eeafe (patch)
tree4820cf91d07f397e361abe2ae23314aa460198c6 /bindings
parentf9fa14aedbbc94b037a1b09c50e136238123e65a (diff)
bindings: add new C++ function attribute accessors
Add methods to index Cursor to see if a cxx method is pure_virtual, virtual or const methods. Patch by Jonathan B Coe! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250008 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings')
-rw-r--r--bindings/python/clang/cindex.py22
-rw-r--r--bindings/python/tests/cindex/test_cursor.py45
2 files changed, 67 insertions, 0 deletions
diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py
index 6a928c3f1d..62b8596dea 100644
--- a/bindings/python/clang/cindex.py
+++ b/bindings/python/clang/cindex.py
@@ -1164,12 +1164,30 @@ class Cursor(Structure):
"""
return conf.lib.clang_isCursorDefinition(self)
+ def is_const_method(self):
+ """Returns True if the cursor refers to a C++ member function or member
+ function template that is declared 'const'.
+ """
+ return conf.lib.clang_CXXMethod_isConst(self)
+
+ def is_pure_virtual_method(self):
+ """Returns True if the cursor refers to a C++ member function or member
+ function template that is declared pure virtual.
+ """
+ return conf.lib.clang_CXXMethod_isPureVirtual(self)
+
def is_static_method(self):
"""Returns True if the cursor refers to a C++ member function or member
function template that is declared 'static'.
"""
return conf.lib.clang_CXXMethod_isStatic(self)
+ def is_virtual_method(self):
+ """Returns True if the cursor refers to a C++ member function or member
+ function template that is declared 'virtual'.
+ """
+ return conf.lib.clang_CXXMethod_isVirtual(self)
+
def get_definition(self):
"""
If the cursor is a reference to a declaration or a declaration of
@@ -2879,6 +2897,10 @@ functionList = [
[Index, c_char_p],
c_object_p),
+ ("clang_CXXMethod_isConst",
+ [Cursor],
+ bool),
+
("clang_CXXMethod_isPureVirtual",
[Cursor],
bool),
diff --git a/bindings/python/tests/cindex/test_cursor.py b/bindings/python/tests/cindex/test_cursor.py
index a5224aafab..68fc8fa4ac 100644
--- a/bindings/python/tests/cindex/test_cursor.py
+++ b/bindings/python/tests/cindex/test_cursor.py
@@ -97,6 +97,21 @@ def test_canonical():
assert len(cursors) == 3
assert cursors[1].canonical == cursors[2].canonical
+def test_is_const_method():
+ """Ensure Cursor.is_const_method works."""
+ source = 'class X { void foo() const; void bar(); };'
+ tu = get_tu(source, lang='cpp')
+
+ cls = get_cursor(tu, 'X')
+ foo = get_cursor(tu, 'foo')
+ bar = get_cursor(tu, 'bar')
+ assert cls is not None
+ assert foo is not None
+ assert bar is not None
+
+ assert foo.is_const_method()
+ assert not bar.is_const_method()
+
def test_is_static_method():
"""Ensure Cursor.is_static_method works."""
@@ -113,6 +128,36 @@ def test_is_static_method():
assert foo.is_static_method()
assert not bar.is_static_method()
+def test_is_pure_virtual_method():
+ """Ensure Cursor.is_pure_virtual_method works."""
+ source = 'class X { virtual void foo() = 0; virtual void bar(); };'
+ tu = get_tu(source, lang='cpp')
+
+ cls = get_cursor(tu, 'X')
+ foo = get_cursor(tu, 'foo')
+ bar = get_cursor(tu, 'bar')
+ assert cls is not None
+ assert foo is not None
+ assert bar is not None
+
+ assert foo.is_pure_virtual_method()
+ assert not bar.is_pure_virtual_method()
+
+def test_is_virtual_method():
+ """Ensure Cursor.is_virtual_method works."""
+ source = 'class X { virtual void foo(); void bar(); };'
+ tu = get_tu(source, lang='cpp')
+
+ cls = get_cursor(tu, 'X')
+ foo = get_cursor(tu, 'foo')
+ bar = get_cursor(tu, 'bar')
+ assert cls is not None
+ assert foo is not None
+ assert bar is not None
+
+ assert foo.is_virtual_method()
+ assert not bar.is_virtual_method()
+
def test_underlying_type():
tu = get_tu('typedef int foo;')
typedef = get_cursor(tu, 'foo')