Пример #1
0
        public void EmitFieldSignature(FieldDesc field, SignatureContext context)
        {
            ModuleToken fieldToken = context.GetModuleTokenForField(field);

            switch (fieldToken.TokenType)
            {
            case CorTokenType.mdtMemberRef:
                EmitUInt((uint)ReadyToRunFieldSigFlags.READYTORUN_FIELD_SIG_MemberRefToken);
                EmitTokenRid(fieldToken.Token);
                break;

            case CorTokenType.mdtFieldDef:
                EmitUInt((uint)0);
                EmitTokenRid(fieldToken.Token);
                break;

            default:
                throw new NotImplementedException();
            }
        }
Пример #2
0
        public void EmitFieldSignature(FieldDesc field, SignatureContext context)
        {
            uint     fieldSigFlags  = 0;
            TypeDesc canonOwnerType = field.OwningType.ConvertToCanonForm(CanonicalFormKind.Specific);
            TypeDesc ownerType      = null;

            if (canonOwnerType.HasInstantiation)
            {
                ownerType      = field.OwningType;
                fieldSigFlags |= (uint)ReadyToRunFieldSigFlags.READYTORUN_FIELD_SIG_OwnerType;
            }
            if (canonOwnerType != field.OwningType)
            {
                // Convert field to canonical form as this is what the field - module token lookup stores
                field = field.Context.GetFieldForInstantiatedType(field.GetTypicalFieldDefinition(), (InstantiatedType)canonOwnerType);
            }

            ModuleToken fieldToken = context.GetModuleTokenForField(field);

            switch (fieldToken.TokenType)
            {
            case CorTokenType.mdtMemberRef:
                fieldSigFlags |= (uint)ReadyToRunFieldSigFlags.READYTORUN_FIELD_SIG_MemberRefToken;
                break;

            case CorTokenType.mdtFieldDef:
                break;

            default:
                throw new NotImplementedException();
            }

            EmitUInt(fieldSigFlags);
            if (ownerType != null)
            {
                EmitTypeSignature(ownerType, context);
            }
            EmitTokenRid(fieldToken.Token);
        }