cindex/Python: Add Cursor.get_children()

llvm-svn: 94359
This commit is contained in:
Daniel Dunbar 2010-01-24 04:10:22 +00:00
parent 7bcfd6eb6d
commit fd7caa25a6
1 changed files with 18 additions and 3 deletions

View File

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