public string ReadDocumentName(uint offset) { sb.Length = 0; if (!blobStream.TryCreateReader(offset, out var reader)) { return(string.Empty); } var sepChars = ReadSeparatorChar(ref reader, out int sepCharsLength); bool needSep = false; while (reader.Position < reader.Length) { if (needSep) { sb.Append(sepChars, 0, sepCharsLength); } needSep = !(sepCharsLength == 1 && sepChars[0] == '\0'); var part = ReadDocumentNamePart(reader.ReadCompressedUInt32()); sb.Append(part); if (sb.Length > MAX_NAME_LENGTH) { sb.Length = MAX_NAME_LENGTH; break; } } return(sb.ToString()); }
public void Read(uint imports, IList <PdbImport> result) { if (imports == 0) { return; } if (!blobStream.TryCreateReader(imports, out var reader)) { return; } while (reader.Position < reader.Length) { var kind = ImportDefinitionKindUtils.ToPdbImportDefinitionKind(reader.ReadCompressedUInt32()); string targetNamespace, alias; AssemblyRef targetAssembly; PdbImport import; ITypeDefOrRef targetType; switch (kind) { case PdbImportDefinitionKind.ImportNamespace: // <import> ::= ImportNamespace <target-namespace> targetNamespace = ReadUTF8(reader.ReadCompressedUInt32()); import = new PdbImportNamespace(targetNamespace); break; case PdbImportDefinitionKind.ImportAssemblyNamespace: // <import> ::= ImportAssemblyNamespace <target-assembly> <target-namespace> targetAssembly = TryReadAssemblyRef(reader.ReadCompressedUInt32()); targetNamespace = ReadUTF8(reader.ReadCompressedUInt32()); import = new PdbImportAssemblyNamespace(targetAssembly, targetNamespace); break; case PdbImportDefinitionKind.ImportType: // <import> ::= ImportType <target-type> targetType = TryReadType(reader.ReadCompressedUInt32()); import = new PdbImportType(targetType); break; case PdbImportDefinitionKind.ImportXmlNamespace: // <import> ::= ImportXmlNamespace <alias> <target-namespace> alias = ReadUTF8(reader.ReadCompressedUInt32()); targetNamespace = ReadUTF8(reader.ReadCompressedUInt32()); import = new PdbImportXmlNamespace(alias, targetNamespace); break; case PdbImportDefinitionKind.ImportAssemblyReferenceAlias: // <import> ::= ImportReferenceAlias <alias> alias = ReadUTF8(reader.ReadCompressedUInt32()); import = new PdbImportAssemblyReferenceAlias(alias); break; case PdbImportDefinitionKind.AliasAssemblyReference: // <import> ::= AliasAssemblyReference <alias> <target-assembly> alias = ReadUTF8(reader.ReadCompressedUInt32()); targetAssembly = TryReadAssemblyRef(reader.ReadCompressedUInt32()); import = new PdbAliasAssemblyReference(alias, targetAssembly); break; case PdbImportDefinitionKind.AliasNamespace: // <import> ::= AliasNamespace <alias> <target-namespace> alias = ReadUTF8(reader.ReadCompressedUInt32()); targetNamespace = ReadUTF8(reader.ReadCompressedUInt32()); import = new PdbAliasNamespace(alias, targetNamespace); break; case PdbImportDefinitionKind.AliasAssemblyNamespace: // <import> ::= AliasAssemblyNamespace <alias> <target-assembly> <target-namespace> alias = ReadUTF8(reader.ReadCompressedUInt32()); targetAssembly = TryReadAssemblyRef(reader.ReadCompressedUInt32()); targetNamespace = ReadUTF8(reader.ReadCompressedUInt32()); import = new PdbAliasAssemblyNamespace(alias, targetAssembly, targetNamespace); break; case PdbImportDefinitionKind.AliasType: // <import> ::= AliasType <alias> <target-type> alias = ReadUTF8(reader.ReadCompressedUInt32()); targetType = TryReadType(reader.ReadCompressedUInt32()); import = new PdbAliasType(alias, targetType); break; case ImportDefinitionKindUtils.UNKNOWN_IMPORT_KIND: import = null; break; default: Debug.Fail("Unknown import definition kind: " + kind.ToString()); import = null; break; } if (!(import is null)) { result.Add(import); } } Debug.Assert(reader.Position == reader.Length); }