SymbolDocument[] ReadDocuments() { Debug.Assert(module is not null); var docTbl = pdbMetadata.TablesStream.DocumentTable; var docs = new SymbolDocument[docTbl.Rows]; var nameReader = new DocumentNameReader(pdbMetadata.BlobStream); var custInfos = ListCache <PdbCustomDebugInfo> .AllocList(); var gpContext = new GenericParamContext(); for (int i = 0; i < docs.Length; i++) { bool b = pdbMetadata.TablesStream.TryReadDocumentRow((uint)i + 1, out var row); Debug.Assert(b); var url = nameReader.ReadDocumentName(row.Name); var language = pdbMetadata.GuidStream.Read(row.Language) ?? Guid.Empty; var languageVendor = GetLanguageVendor(language); var documentType = PdbDocumentConstants.DocumentTypeText; var checkSumAlgorithmId = pdbMetadata.GuidStream.Read(row.HashAlgorithm) ?? Guid.Empty; var checkSum = pdbMetadata.BlobStream.ReadNoNull(row.Hash); var token = new MDToken(Table.Document, i + 1).ToInt32(); custInfos.Clear(); GetCustomDebugInfos(token, gpContext, custInfos); var custInfosArray = custInfos.Count == 0 ? Array2.Empty <PdbCustomDebugInfo>() : custInfos.ToArray(); docs[i] = new SymbolDocumentImpl(url, language, languageVendor, documentType, checkSumAlgorithmId, checkSum, custInfosArray); } ListCache <PdbCustomDebugInfo> .Free(ref custInfos); return(docs); }
SymbolDocument[] ReadDocuments() { Debug.Assert(module != null); var docTbl = pdbMetaData.TablesStream.DocumentTable; var docs = new SymbolDocument[docTbl.Rows]; var nameReader = new DocumentNameReader(pdbMetaData.BlobStream); var custInfos = ListCache <PdbCustomDebugInfo> .AllocList(); var gpContext = new GenericParamContext(); for (int i = 0; i < docs.Length; i++) { uint nameOffset, hashAlgorithmIndex, hashOffset; uint languageIndex = pdbMetaData.TablesStream.ReadDocumentRow2((uint)i + 1, out nameOffset, out hashAlgorithmIndex, out hashOffset); var url = nameReader.ReadDocumentName(nameOffset); var language = pdbMetaData.GuidStream.Read(languageIndex) ?? Guid.Empty; var languageVendor = GetLanguageVendor(language); var documentType = PdbDocumentConstants.DocumentTypeText; var checkSumAlgorithmId = pdbMetaData.GuidStream.Read(hashAlgorithmIndex) ?? Guid.Empty; var checkSum = pdbMetaData.BlobStream.ReadNoNull(hashOffset); var token = new MDToken(Table.Document, i + 1).ToInt32(); custInfos.Clear(); GetCustomDebugInfos(token, gpContext, custInfos); var custInfosArray = custInfos.Count == 0 ? emptyPdbCustomDebugInfos : custInfos.ToArray(); docs[i] = new SymbolDocumentImpl(url, language, languageVendor, documentType, checkSumAlgorithmId, checkSum, custInfosArray); } ListCache <PdbCustomDebugInfo> .Free(ref custInfos); return(docs); }
PdbDocument(SymbolDocument symDoc, bool partial) { if (symDoc == null) { throw new ArgumentNullException(nameof(symDoc)); } Url = symDoc.URL; if (!partial) { Initialize(symDoc); } }
bool TryGetSymbolDocument(uint rid, out SymbolDocument document) { int index = (int)rid - 1; if ((uint)index >= (uint)documents.Length) { Debug.Fail("Couldn't find document with rid 0x" + rid.ToString("X6")); document = null; return(false); } document = documents[index]; return(true); }
internal void Initialize(SymbolDocument symDoc) { Language = symDoc.Language; LanguageVendor = symDoc.LanguageVendor; DocumentType = symDoc.DocumentType; CheckSumAlgorithmId = symDoc.CheckSumAlgorithmId; CheckSum = symDoc.CheckSum; customDebugInfos = new List <PdbCustomDebugInfo>(); foreach (var cdi in symDoc.CustomDebugInfos) { customDebugInfos.Add(cdi); } }
/// <summary> /// Constructor /// </summary> /// <param name="symDoc">A <see cref="SymbolDocument"/> instance</param> public PdbDocument(SymbolDocument symDoc) { if (symDoc == null) { throw new ArgumentNullException("symDoc"); } this.Url = symDoc.URL; this.Language = symDoc.Language; this.LanguageVendor = symDoc.LanguageVendor; this.DocumentType = symDoc.DocumentType; this.CheckSumAlgorithmId = symDoc.CheckSumAlgorithmId; this.CheckSum = symDoc.CheckSum; foreach (var cdi in symDoc.CustomDebugInfos) { customDebugInfos.Add(cdi); } }
internal static PdbDocument CreatePartialForCompare(SymbolDocument symDoc) => new PdbDocument(symDoc, partial: true);
/// <summary> /// Constructor /// </summary> /// <param name="symDoc">A <see cref="SymbolDocument"/> instance</param> public PdbDocument(SymbolDocument symDoc) : this(symDoc, partial : false) { }