Exemplo n.º 1
0
        public DmdTypeRefMD(DmdEcma335MetadataReader reader, uint rid, IList <DmdCustomModifier> customModifiers) : base(reader.Module, rid, customModifiers)
        {
            this.reader = reader ?? throw new ArgumentNullException(nameof(reader));

            bool b = reader.TablesStream.TryReadTypeRefRow(rid, out var row);

            Debug.Assert(b);
            var ns = reader.StringsStream.Read(row.Namespace);

            MetadataNamespace = string.IsNullOrEmpty(ns) ? null : ns;
            MetadataName      = reader.StringsStream.ReadNoNull(row.Name);

            if (!CodedToken.ResolutionScope.Decode(row.ResolutionScope, out uint resScopeToken))
            {
                resScopeToken = uint.MaxValue;
            }
            switch (resScopeToken >> 24)
            {
            case 0x00:
                TypeScope = new DmdTypeScope(reader.Module);
                break;

            case 0x01:
                TypeScope     = DmdTypeScope.Invalid;
                declTypeToken = (int)resScopeToken;
                break;

            case 0x1A:
                reader.TablesStream.TryReadModuleRefRow(resScopeToken & 0x00FFFFFF, out var moduleRefRow);
                var moduleName = reader.StringsStream.ReadNoNull(moduleRefRow.Name);
                TypeScope = new DmdTypeScope(reader.GetName(), moduleName);
                break;

            case 0x23:
                TypeScope = new DmdTypeScope(reader.ReadAssemblyName(resScopeToken & 0x00FFFFFF));
                break;

            default:
                TypeScope = DmdTypeScope.Invalid;
                break;
            }
        }
Exemplo n.º 2
0
        public DmdExportedTypeMD(DmdEcma335MetadataReader reader, uint rid, IList <DmdCustomModifier> customModifiers) : base(reader.Module, rid, customModifiers)
        {
            this.reader = reader ?? throw new ArgumentNullException(nameof(reader));

            bool b = reader.TablesStream.TryReadExportedTypeRow(rid, out var row);

            Debug.Assert(b);
            var ns = reader.StringsStream.Read(row.TypeNamespace);

            MetadataNamespace = string.IsNullOrEmpty(ns) ? null : ns;
            MetadataName      = reader.StringsStream.ReadNoNull(row.TypeName);

            if (!CodedToken.Implementation.Decode(row.Implementation, out uint implToken))
            {
                implToken = uint.MaxValue;
            }
            switch (implToken >> 24)
            {
            case 0x23:
                TypeScope = new DmdTypeScope(reader.ReadAssemblyName(implToken & 0x00FFFFFF));
                break;

            case 0x26:
                reader.TablesStream.TryReadFileRow(implToken & 0x00FFFFFF, out var fileRow);
                var moduleName = reader.StringsStream.ReadNoNull(fileRow.Name);
                TypeScope = new DmdTypeScope(reader.GetName(), moduleName);
                break;

            case 0x27:
                TypeScope     = DmdTypeScope.Invalid;
                baseTypeToken = (int)implToken;
                break;

            default:
                TypeScope = DmdTypeScope.Invalid;
                break;
            }
        }