in src/Refasmer/Importer/SignatureImport.cs [145:214]
private void AcceptTypeSignature<T>(ref BlobReader blobReader, ISignatureVisitor<T> visitor)
{
var typeCode = blobReader.ReadCompressedInteger();
visitor.WriteCompressedInteger(typeCode);
switch (typeCode)
{
case (int)SignatureTypeCode.Boolean:
case (int)SignatureTypeCode.Char:
case (int)SignatureTypeCode.SByte:
case (int)SignatureTypeCode.Byte:
case (int)SignatureTypeCode.Int16:
case (int)SignatureTypeCode.UInt16:
case (int)SignatureTypeCode.Int32:
case (int)SignatureTypeCode.UInt32:
case (int)SignatureTypeCode.Int64:
case (int)SignatureTypeCode.UInt64:
case (int)SignatureTypeCode.Single:
case (int)SignatureTypeCode.Double:
case (int)SignatureTypeCode.IntPtr:
case (int)SignatureTypeCode.UIntPtr:
case (int)SignatureTypeCode.Object:
case (int)SignatureTypeCode.String:
case (int)SignatureTypeCode.Void:
case (int)SignatureTypeCode.TypedReference:
case (int)SignatureTypeCode.Sentinel:
break;
case (int)SignatureTypeCode.Pointer:
case (int)SignatureTypeCode.ByReference:
case (int)SignatureTypeCode.Pinned:
case (int)SignatureTypeCode.SZArray:
AcceptTypeSignature(ref blobReader, visitor);
break;
case (int)SignatureTypeCode.FunctionPointer:
var header = blobReader.ReadSignatureHeader();
visitor.WriteByte(header.RawValue);
AcceptMethodSignature(header, ref blobReader, visitor);
break;
case (int)SignatureTypeCode.Array:
AcceptArrayTypeSignature(ref blobReader, visitor);
break;
case (int)SignatureTypeCode.RequiredModifier:
case (int)SignatureTypeCode.OptionalModifier:
AcceptModifiedTypeSignature(ref blobReader, visitor);
break;
case (int)SignatureTypeCode.GenericTypeInstance:
AcceptGenericTypeInstanceSignature(ref blobReader, visitor);
break;
case (int)SignatureTypeCode.GenericTypeParameter:
case (int)SignatureTypeCode.GenericMethodParameter:
var index = blobReader.ReadCompressedInteger();
visitor.WriteCompressedInteger(index);
break;
case (int)SignatureTypeKind.Class:
case (int)SignatureTypeKind.ValueType:
AcceptTypeHandleSignature(ref blobReader, visitor);
break;
default:
throw new BadImageFormatException();
}
}