/// <summary> /// Adds the specified PdbFunction lines to the provided function wrapper. /// </summary> /// <param name="wrappedPdbFunction">The wrapped PdbFunction, the lines /// should be added to.</param> /// <param name="pdbFunctionLines">A PdbLines object containing the /// source lines of a PdbFunction.</param> private static void AddPdbFunctionLines(PdbFunction wrappedPdbFunction, object pdbFunctionLines) { if (pdbFunctionLines == null || (pdbFunctionLines as Array).Length == 0) { return; } object lines = (pdbFunctionLines as Array).GetValue(0); var pdbFunctionLinesFile = GetField(lines, PdbLinesType, PdbLinesFileFieldName); var pdbFunctionLinesFileName = GetField(pdbFunctionLinesFile, PdbSourceType, PdbSourceNameFieldName) as string; wrappedPdbFunction.SourceFilename = pdbFunctionLinesFileName; var pdbFunctionLinesLineArray = GetField(lines, PdbLinesType, PdbLinesLinesFieldName) as Array; if (pdbFunctionLinesLineArray?.Length > 0) { var lineNumbers = FilterAndSortLines(pdbFunctionLinesLineArray); if (lineNumbers.Count == 0) { wrappedPdbFunction.StartLine = CompilerHiddenLine; wrappedPdbFunction.EndLine = CompilerHiddenLine; } else { wrappedPdbFunction.StartLine = lineNumbers.First(); wrappedPdbFunction.EndLine = lineNumbers.Last(); } } }
/// <summary> /// Provides the method mapping for the specified Pdb method. /// </summary> private static MethodMapping GetMapping(PdbFunction pdbFunction) { return(new MethodMapping() { MethodToken = pdbFunction.Token, SourceFile = pdbFunction.SourceFilename, StartLine = pdbFunction.StartLine, EndLine = pdbFunction.EndLine }); }
/// <summary> /// Wraps the specified MS PdbFunction object into an object of type /// <see cref="PdbFunction"/>. /// </summary> private static PdbFunction WrapPdbFunction(object pdbFunction) { var wrappedPdbFunction = new PdbFunction(); wrappedPdbFunction.Token = (uint)GetField(pdbFunction, PdbFunctionType, PdbFunctionTokenFieldName); var pdbFunctionLines = GetField(pdbFunction, PdbFunctionType, PdbFunctionLinesFieldName); if (pdbFunctionLines != null) { AddPdbFunctionLines(wrappedPdbFunction, pdbFunctionLines); } return(wrappedPdbFunction); }