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(); } }
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); }