From fd7caa25a69cb347bf93bc70ccf24f21a67ac15d Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sun, 24 Jan 2010 04:10:22 +0000 Subject: [PATCH] cindex/Python: Add Cursor.get_children() llvm-svn: 94359 --- clang/bindings/python/clang/cindex.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py index 43d9caf1c496..394214c3a987 100644 --- a/clang/bindings/python/clang/cindex.py +++ b/clang/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]