public void GetInclusions(CXInclusionVisitor visitor, CXClientData clientData)
        {
            var pVisitor = Marshal.GetFunctionPointerForDelegate(visitor);

            clang.getInclusions(this, pVisitor, clientData);
            GC.KeepAlive(visitor);
        }
        /// <summary>
        /// Visits the set of preprocessor inclusions in a translation unit. The
        /// <see cref="VisitInclusion(SourceFile, SourceLocation[])"/> method is called with the
        /// provided data for every included file. This does not include headers included by the
        /// PCH file (unless one is inspecting the inclusions in the PCH file itself).
        /// </summary>
        /// <param name="translationUnit">The translation unit to visit.</param>
        public void Visit(TranslationUnit translationUnit)
        {
            Requires.NotNull(translationUnit, nameof(translationUnit));
            translationUnit.ThrowIfDisposed();

            CXInclusionVisitor visitor =
                (included_file, inclusion_stack, include_len, client_data) =>
            {
                var inclusionStack = new SourceLocation[include_len];
                inclusionStack.SetValues(i => SourceLocation.GetSpellingLocation(
                                             inclusion_stack[i],
                                             translationUnit));
                VisitInclusion(new SourceFile(included_file, translationUnit), inclusionStack);
            };

            try
            {
                NativeMethods.clang_getInclusions(
                    translationUnit.Ptr,
                    Marshal.GetFunctionPointerForDelegate(visitor),
                    null);
            }
            finally
            {
                GC.KeepAlive(visitor);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Create Native Clang Inclusion Visitor
        /// </summary>
        /// <typeparam name="T">Client Data Type</typeparam>
        /// <param name="visitor">Managed Clang Inclusion Visitor Function</param>
        /// <param name="client_data">Client Data</param>
        /// <returns>Native Clang Inclusion Visitor</returns>
        private CXInclusionVisitor CreateNativeInclusionVisitor <T>(Action <ClangFile, ClangSourceLocation[], T> visitor, T client_data)
        {
            CXInclusionVisitor v = (native_file, native_locations, native_len, native_client_data) =>
            {
                var file = native_file.ToManaged <ClangFile>();

                var locations = native_locations.ToNativeStructs <CXSourceLocation>((int)native_len).Select(loc => loc.ToManaged()).ToArray();

                visitor(file, locations, client_data);
            };

            return(v);
        }
Beispiel #4
0
 public static extern void getInclusions(CXTranslationUnit @tu, CXInclusionVisitor @visitor, CXClientData @client_data);
Beispiel #5
0
 public void GetInclusions(CXInclusionVisitor visitor, CXClientData clientData) => clang.getInclusions(this, visitor, clientData);
Beispiel #6
0
 internal static extern void clang_getInclusions(IntPtr tu, CXInclusionVisitor visitor, IntPtr clientData);
Beispiel #7
0
 internal static extern void    clang_getInclusions(CXTranslationUnit tu, CXInclusionVisitor visitor, CXClientData client_data);
Beispiel #8
0
 internal static extern void clang_getInclusions(CXTranslationUnit tu, CXInclusionVisitor visitor, CXClientData clientData);
Beispiel #9
0
        public void GetInclusions(Action <ClangFile, ClangSourceLocation[], IntPtr> visitor, IntPtr clientData)
        {
            CXInclusionVisitor v = (file, locations, len, cd) => visitor(new ClangFile(file), Enumerable.Range(0, (int)len).Select(i => new ClangSourceLocation((CXSourceLocation)Marshal.PtrToStructure(locations + loc_size * i, typeof(CXSourceLocation)))).ToArray(), cd);

            LibClang.clang_getInclusions(Handle, v, clientData);
        }