in ClrMemDiag/Utilities/sigparser.cs [205:274]
private bool PeekElemTypeSize(out int pSize)
{
pSize = 0;
SigParser sigTemp = new SigParser(this);
if (!sigTemp.SkipAnyVASentinel())
return false;
byte bElementType = 0;
if (!sigTemp.GetByte(out bElementType))
return false;
switch (bElementType)
{
case ELEMENT_TYPE_I8:
case ELEMENT_TYPE_U8:
case ELEMENT_TYPE_R8:
pSize = 8;
break;
case ELEMENT_TYPE_I4:
case ELEMENT_TYPE_U4:
case ELEMENT_TYPE_R4:
pSize = 4;
break;
case ELEMENT_TYPE_I2:
case ELEMENT_TYPE_U2:
case ELEMENT_TYPE_CHAR:
pSize = 2;
break;
case ELEMENT_TYPE_I1:
case ELEMENT_TYPE_U1:
case ELEMENT_TYPE_BOOLEAN:
pSize = 1;
break;
case ELEMENT_TYPE_I:
case ELEMENT_TYPE_U:
case ELEMENT_TYPE_STRING:
case ELEMENT_TYPE_PTR:
case ELEMENT_TYPE_BYREF:
case ELEMENT_TYPE_CLASS:
case ELEMENT_TYPE_OBJECT:
case ELEMENT_TYPE_FNPTR:
case ELEMENT_TYPE_TYPEDBYREF:
case ELEMENT_TYPE_ARRAY:
case ELEMENT_TYPE_SZARRAY:
pSize = IntPtr.Size;
break;
case ELEMENT_TYPE_VOID:
break;
case ELEMENT_TYPE_END:
case ELEMENT_TYPE_CMOD_REQD:
case ELEMENT_TYPE_CMOD_OPT:
case ELEMENT_TYPE_VALUETYPE:
Debug.Fail("Asked for the size of an element that doesn't have a size!");
return false;
default:
Debug.Fail("CorSigGetElementTypeSize given invalid signature to size!");
return false;
}
return true; ;
}