void Write(DataWriter writer, IList <PdbImport> imports) { int count = imports.Count; for (int i = 0; i < count; i++) { var import = imports[i]; if (!ImportDefinitionKindUtils.ToImportDefinitionKind(import.Kind, out uint rawKind)) { helper.Error2("Unknown import definition kind: {0}.", import.Kind); return; } writer.WriteCompressedUInt32(rawKind); switch (import.Kind) { case PdbImportDefinitionKind.ImportNamespace: // <import> ::= ImportNamespace <target-namespace> writer.WriteCompressedUInt32(WriteUTF8(((PdbImportNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.ImportAssemblyNamespace: // <import> ::= ImportAssemblyNamespace <target-assembly> <target-namespace> writer.WriteCompressedUInt32(systemMetadata.GetToken(((PdbImportAssemblyNamespace)import).TargetAssembly).Rid); writer.WriteCompressedUInt32(WriteUTF8(((PdbImportAssemblyNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.ImportType: // <import> ::= ImportType <target-type> writer.WriteCompressedUInt32(GetTypeDefOrRefEncodedToken(((PdbImportType)import).TargetType)); break; case PdbImportDefinitionKind.ImportXmlNamespace: // <import> ::= ImportXmlNamespace <alias> <target-namespace> writer.WriteCompressedUInt32(WriteUTF8(((PdbImportXmlNamespace)import).Alias)); writer.WriteCompressedUInt32(WriteUTF8(((PdbImportXmlNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.ImportAssemblyReferenceAlias: // <import> ::= ImportReferenceAlias <alias> writer.WriteCompressedUInt32(WriteUTF8(((PdbImportAssemblyReferenceAlias)import).Alias)); break; case PdbImportDefinitionKind.AliasAssemblyReference: // <import> ::= AliasAssemblyReference <alias> <target-assembly> writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasAssemblyReference)import).Alias)); writer.WriteCompressedUInt32(systemMetadata.GetToken(((PdbAliasAssemblyReference)import).TargetAssembly).Rid); break; case PdbImportDefinitionKind.AliasNamespace: // <import> ::= AliasNamespace <alias> <target-namespace> writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasNamespace)import).Alias)); writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.AliasAssemblyNamespace: // <import> ::= AliasAssemblyNamespace <alias> <target-assembly> <target-namespace> writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasAssemblyNamespace)import).Alias)); writer.WriteCompressedUInt32(systemMetadata.GetToken(((PdbAliasAssemblyNamespace)import).TargetAssembly).Rid); writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasAssemblyNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.AliasType: // <import> ::= AliasType <alias> <target-type> writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasType)import).Alias)); writer.WriteCompressedUInt32(GetTypeDefOrRefEncodedToken(((PdbAliasType)import).TargetType)); break; default: helper.Error2("Unknown import definition kind: {0}.", import.Kind); return; } } }
void Write(BinaryWriter writer, IList <PdbImport> imports) { foreach (var import in imports) { uint rawKind; if (!ImportDefinitionKindUtils.ToImportDefinitionKind(import.Kind, out rawKind)) { helper.Error("Unknown import definition kind: " + import.Kind.ToString()); return; } writer.WriteCompressedUInt32(rawKind); switch (import.Kind) { case PdbImportDefinitionKind.ImportNamespace: // <import> ::= ImportNamespace <target-namespace> writer.WriteCompressedUInt32(WriteUTF8(((PdbImportNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.ImportAssemblyNamespace: // <import> ::= ImportAssemblyNamespace <target-assembly> <target-namespace> writer.WriteCompressedUInt32(systemMetaData.GetToken(((PdbImportAssemblyNamespace)import).TargetAssembly).Rid); writer.WriteCompressedUInt32(WriteUTF8(((PdbImportAssemblyNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.ImportType: // <import> ::= ImportType <target-type> writer.WriteCompressedUInt32(GetTypeDefOrRefEncodedToken(((PdbImportType)import).TargetType)); break; case PdbImportDefinitionKind.ImportXmlNamespace: // <import> ::= ImportXmlNamespace <alias> <target-namespace> writer.WriteCompressedUInt32(WriteUTF8(((PdbImportXmlNamespace)import).Alias)); writer.WriteCompressedUInt32(WriteUTF8(((PdbImportXmlNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.ImportAssemblyReferenceAlias: // <import> ::= ImportReferenceAlias <alias> writer.WriteCompressedUInt32(WriteUTF8(((PdbImportAssemblyReferenceAlias)import).Alias)); break; case PdbImportDefinitionKind.AliasAssemblyReference: // <import> ::= AliasAssemblyReference <alias> <target-assembly> writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasAssemblyReference)import).Alias)); writer.WriteCompressedUInt32(systemMetaData.GetToken(((PdbAliasAssemblyReference)import).TargetAssembly).Rid); break; case PdbImportDefinitionKind.AliasNamespace: // <import> ::= AliasNamespace <alias> <target-namespace> writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasNamespace)import).Alias)); writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.AliasAssemblyNamespace: // <import> ::= AliasAssemblyNamespace <alias> <target-assembly> <target-namespace> writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasAssemblyNamespace)import).Alias)); writer.WriteCompressedUInt32(systemMetaData.GetToken(((PdbAliasAssemblyNamespace)import).TargetAssembly).Rid); writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasAssemblyNamespace)import).TargetNamespace)); break; case PdbImportDefinitionKind.AliasType: // <import> ::= AliasType <alias> <target-type> writer.WriteCompressedUInt32(WriteUTF8(((PdbAliasType)import).Alias)); writer.WriteCompressedUInt32(GetTypeDefOrRefEncodedToken(((PdbAliasType)import).TargetType)); break; default: helper.Error("Unknown import definition kind: " + import.Kind.ToString()); return; } } }