From de3b8e525a876d6c25554aeb782c368afec00db1 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sun, 24 Jan 2010 04:10:22 +0000 Subject: cindex/Python: Add Cursor.get_children() git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94359 91177308-0d34-0410-b5e6-96231b3b80d8 --- bindings/python/clang/cindex.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'bindings/python') diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py index 43d9caf1c4..394214c3a9 100644 --- a/bindings/python/clang/cindex.py +++ b/bindings/python/clang/cindex.py @@ -221,6 +221,17 @@ class Cursor(Structure): """ return self.location.file + def get_children(self): + """Return an iterator for the accessing children of this cursor.""" + + # FIXME: Expose iteration from CIndex, PR6125. + def visitor(child, parent, children): + children.append(child) + return 1 # continue + children = [] + Cursor_visit(self, Callback(visitor), children) + return iter(children) + ## CIndex Objects ## # CIndex objects (derived from ClangObject) are essentially lightweight @@ -326,8 +337,8 @@ class File(ClangObject): # Additional Functions and Types -# Wrap calls to Cursor_visit. -Callback = CFUNCTYPE(None, c_void_p, Cursor, c_void_p) +# Wrap calls to TranslationUnit._load and Decl._load. +Callback = CFUNCTYPE(c_int, Cursor, Cursor, py_object) # String Functions String_dispose = lib.clang_disposeString @@ -350,7 +361,7 @@ SourceRange_end.restype = SourceLocation # Cursor Functions # TODO: Implement this function Cursor_get = lib.clang_getCursor -Cursor_get.argtypes = [TranslationUnit, c_char_p, c_uint, c_uint] +Cursor_get.argtypes = [TranslationUnit, SourceLocation] Cursor.restype = Cursor Cursor_null = lib.clang_getNullCursor @@ -415,6 +426,10 @@ Cursor_ref = lib.clang_getCursorReferenced Cursor_ref.argtypes = [Cursor] Cursor_ref.restype = Cursor +Cursor_visit = lib.clang_visitChildren +Cursor_visit.argtypes = [Cursor, Callback, py_object] +Cursor_visit.restype = c_uint + # Index Functions Index_create = lib.clang_createIndex Index_create.argtypes = [c_int, c_int] -- cgit v1.2.3-70-g09d2