private static CallingConventionSignature ReadSignature( ModuleDefinition module, IBinaryStreamReader reader, RecursionProtection protection) { byte flag = reader.ReadByte(); reader.FileOffset--; switch ((CallingConventionAttributes)flag & SignatureTypeMask) { case CallingConventionAttributes.Default: case CallingConventionAttributes.C: case CallingConventionAttributes.ExplicitThis: case CallingConventionAttributes.FastCall: case CallingConventionAttributes.StdCall: case CallingConventionAttributes.ThisCall: case CallingConventionAttributes.VarArg: return(MethodSignature.FromReader(module, reader, protection)); case CallingConventionAttributes.Property: return(PropertySignature.FromReader(module, reader, protection)); case CallingConventionAttributes.Local: return(LocalVariablesSignature.FromReader(module, reader, protection)); case CallingConventionAttributes.GenericInstance: return(GenericInstanceMethodSignature.FromReader(module, reader, protection)); case CallingConventionAttributes.Field: return(FieldSignature.FromReader(module, reader, protection)); } throw new NotSupportedException(); }
internal static GenericInstanceMethodSignature FromReader(ModuleDefinition parentModule, IBinaryStreamReader reader, RecursionProtection protection) { if (!reader.CanRead(sizeof(byte))) { return(null); } var attributes = (CallingConventionAttributes)reader.ReadByte(); var result = new GenericInstanceMethodSignature(attributes); if (!reader.TryReadCompressedUInt32(out uint count)) { return(result); } for (int i = 0; i < count; i++) { result.TypeArguments.Add(TypeSignature.FromReader(parentModule, reader, protection)); } return(result); }