This patch exposes an interface to libclang's clang_getOverriddenCursors
and clang_disposeOverriddenCursors functions to the python api.
The patch is adapted from this stack overflow response but cleaned up to
fit within the existing cindex.py codebase
https://stackoverflow.com/questions/35962473/libclang-python-binding-function-getoverridden
Let me know if there's anything I need to address. I can add unit tests if
desired but that would double the length of this patch.
Patch attached
diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py
index b53661a..45d7708 100644
--- a/bindings/python/clang/cindex.py
+++ b/bindings/python/clang/cindex.py
@@ -1818,6 +1818,25 @@ class Cursor(Structure):
children)
return iter(children)
+ def get_overridden_cursors(self):
+ """
+ If this cursor is an override method, return an iterator for
+ accessing the cursors that this overrides
+ """
+ cursors = POINTER(Cursor)()
+ num = c_uint()
+ conf.lib.clang_getOverriddenCursors(self, byref(cursors), byref(num))
+
+ updcursors = []
+ for i in xrange(int(num.value)):
+ c = cursors[i]
+ updcursor = Cursor.from_location(self._tu, c.location)
+ updcursors.append(updcursor)
+
+ conf.lib.clang_disposeOverriddenCursors(cursors)
+
+ return updcursors
+
def walk_preorder(self):
"""Depth-first preorder walk over the cursor and its descendants.
@@ -3926,6 +3945,14 @@ functionList = [
[Cursor, callbacks['cursor_visit'], py_object],
c_uint),
+ ("clang_getOverriddenCursors",
+ [Cursor, POINTER(POINTER(Cursor)), POINTER(c_uint)],
+ None),
+
+ ("clang_disposeOverriddenCursors",
+ [POINTER(Cursor)],
+ None),
+
("clang_Cursor_getNumArguments",
[Cursor],
c_int),
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits