/// <summary> /// Visits the children of a particular cursor. /// </summary> /// <param name="cursor"> /// the cursor whose child may be visited. All kinds of cursors can be visited, including /// invalid cursors (which, by definition, have no children). /// </param> /// <returns> /// true if the traversal was terminated prematurely by the visitor returning /// <see cref="ChildVisitResult.Break"/>. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="cursor"/> is null. /// </exception> public bool VisitChildren(Cursor cursor) { Requires.NotNull(cursor, nameof(cursor)); cursor.ThrowIfDisposed(); var translationUnit = cursor.TranslationUnit; CXCursorVisitor visitor = (cxCursor, parent, client_data) => { return((CXChildVisitResult)Visit( Cursor.Create(cxCursor, translationUnit), Cursor.Create(parent, translationUnit))); }; try { return(NativeMethods.clang_visitChildren( cursor.Struct, Marshal.GetFunctionPointerForDelegate(visitor), null) != 0); } finally { GC.KeepAlive(visitor); } }
public CXChildVisitResult VisitChildren(CXCursorVisitor visitor, CXClientData clientData) { var pVisitor = Marshal.GetFunctionPointerForDelegate(visitor); var result = (CXChildVisitResult)clang.visitChildren(this, pVisitor, clientData); GC.KeepAlive(visitor); return(result); }
protected CXChildVisitResult Handle(CXCursorVisitor visitor, CXCursor cursor, CXCursor parent, CXClientData data) { if (BeginHandle(cursor, parent)) { cursor.VisitChildren(visitor, data); } EndHandle(cursor, parent); return(CXChildVisitResult.CXChildVisit_Continue); }
private List <CXCursor> RetrieveAttributeCursorsIn(CXCursor methodCursor) { var attributeCursors = new List <CXCursor>(); CXCursorVisitor methodVisitor = (cursor, parent, data) => { if (cursor.kind == CXCursorKind.CXCursor_AnnotateAttr) { attributeCursors.Add(cursor); } return(CXChildVisitResult.CXChildVisit_Continue); }; clang.visitChildren(methodCursor, methodVisitor, new CXClientData()); return(attributeCursors); }
public List <CXCursor> RetrieveMethodCursorsIn(CXCursor classCursor) { var methodCursors = new List <CXCursor>(); CXCursorVisitor methodVisitor = (cursor, parent, data) => { if (cursor.kind == CXCursorKind.CXCursor_CXXMethod) { methodCursors.Add(cursor); } return(CXChildVisitResult.CXChildVisit_Continue); }; clang.visitChildren(classCursor, methodVisitor, new CXClientData()); return(methodCursors); }
public List <CXCursor> RetrieveClassCursors() { var classCursors = new List <CXCursor>(); CXCursorVisitor classVisitor = (cursor, parent, data) => { if (cursor.kind == CXCursorKind.CXCursor_ClassDecl) { if (ItIsNotAnIncludedClass(cursor)) { classCursors.Add(cursor); } } return(CXChildVisitResult.CXChildVisit_Continue); }; clang.visitChildren(Cursor, classVisitor, new CXClientData()); return(classCursors); }
public static extern uint visitChildren(CXCursor @parent, CXCursorVisitor @visitor, CXClientData @client_data);
public CXChildVisitResult VisitChildren(CXCursorVisitor visitor, CXClientData clientData) => (CXChildVisitResult)clang.visitChildren(this, visitor, clientData);
internal static extern ChildVisitResult clang_visitChildren(CXCursor parent, CXCursorVisitor visitor, CXClientData client_data);
internal static extern uint clang_visitChildren(CXCursor parent, CXCursorVisitor visitor, CXClientData clientData);
public Analyzer() { _Index = clang.createIndex(0, 0); _CursorVisitor = new CXCursorVisitor(this.VisitChild); }