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); } }
/// <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); }
public static extern void getInclusions(CXTranslationUnit @tu, CXInclusionVisitor @visitor, CXClientData @client_data);
public void GetInclusions(CXInclusionVisitor visitor, CXClientData clientData) => clang.getInclusions(this, visitor, clientData);
internal static extern void clang_getInclusions(IntPtr tu, CXInclusionVisitor visitor, IntPtr clientData);
internal static extern void clang_getInclusions(CXTranslationUnit tu, CXInclusionVisitor visitor, CXClientData client_data);
internal static extern void clang_getInclusions(CXTranslationUnit tu, CXInclusionVisitor visitor, CXClientData clientData);
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); }