protected internal void EmitLdindHelper(Type type)
{
OpCode op;
if (type.IsPrimitive)
{
switch (Type.GetTypeCode(type))
{
case TypeCode.SByte:
case TypeCode.Boolean:
op = OpCodes.Ldind_I1;
break;
case TypeCode.Byte:
op = OpCodes.Ldind_U1;
break;
case TypeCode.Int16:
op = OpCodes.Ldind_I2;
break;
case TypeCode.UInt16:
case TypeCode.Char:
op = OpCodes.Ldind_U2;
break;
case TypeCode.Int32:
op = OpCodes.Ldind_I4;
break;
case TypeCode.UInt32:
op = OpCodes.Ldind_U4;
break;
case TypeCode.Int64:
case TypeCode.UInt64:
op = OpCodes.Ldind_I8;
break;
case TypeCode.Single:
op = OpCodes.Ldind_R4;
break;
case TypeCode.Double:
op = OpCodes.Ldind_R8;
break;
default:
throw new NotSupportedException();
}
}
else if (type.IsValueType)
{
IL.Emit(OpCodes.Ldobj, type);
return;
}
else
op = OpCodes.Ldind_Ref;
IL.Emit(op);
}