public static FromReader ( MetadataHeader header, IBinaryStreamReader reader ) : |
||
header | MetadataHeader | |
reader | IBinaryStreamReader | |
return |
public static new MethodSignature FromReader(MetadataHeader header, IBinaryStreamReader reader)
{
if (!reader.CanRead(sizeof (byte)))
return null;
var signature = new MethodSignature
{
StartOffset = reader.Position,
Attributes = (CallingConventionAttributes)reader.ReadByte()
};
if (signature.IsGeneric)
{
uint genericParameterCount;
if (!reader.TryReadCompressedUInt32(out genericParameterCount))
return signature;
signature.GenericParameterCount = (int)genericParameterCount;
}
uint parameterCount;
if (!reader.TryReadCompressedUInt32(out parameterCount))
return signature;
signature.ReturnType = TypeSignature.FromReader(header, reader);
for (int i = 0; i < parameterCount; i++)
{
signature.Parameters.Add(ParameterSignature.FromReader(header, reader));
}
return signature;
}
public static CallingConventionSignature FromReader(MetadataImage image, IBinaryStreamReader reader) { var flag = reader.ReadByte(); reader.Position--; 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(image, reader)); case CallingConventionAttributes.Property: return(PropertySignature.FromReader(image, reader)); case CallingConventionAttributes.Local: return(LocalVariableSignature.FromReader(image, reader)); case CallingConventionAttributes.GenericInstance: return(GenericInstanceMethodSignature.FromReader(image, reader)); case CallingConventionAttributes.Field: return(FieldSignature.FromReader(image, reader)); } throw new NotSupportedException(); }