Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
 public static extern uint visitChildren(CXCursor @parent, CXCursorVisitor @visitor, CXClientData @client_data);
Ejemplo n.º 8
0
 public CXChildVisitResult VisitChildren(CXCursorVisitor visitor, CXClientData clientData) => (CXChildVisitResult)clang.visitChildren(this, visitor, clientData);
Ejemplo n.º 9
0
 internal static extern ChildVisitResult clang_visitChildren(CXCursor parent, CXCursorVisitor visitor, CXClientData client_data);
Ejemplo n.º 10
0
 internal static extern uint clang_visitChildren(CXCursor parent, CXCursorVisitor visitor, CXClientData clientData);
Ejemplo n.º 11
0
 public Analyzer()
 {
     _Index         = clang.createIndex(0, 0);
     _CursorVisitor = new CXCursorVisitor(this.VisitChild);
 }