public void EmitLoadFromPtr (TypeSpec t)
{
if (t == TypeManager.int32_type)
ig.Emit (OpCodes.Ldind_I4);
else if (t == TypeManager.uint32_type)
ig.Emit (OpCodes.Ldind_U4);
else if (t == TypeManager.short_type)
ig.Emit (OpCodes.Ldind_I2);
else if (t == TypeManager.ushort_type)
ig.Emit (OpCodes.Ldind_U2);
else if (t == TypeManager.char_type)
ig.Emit (OpCodes.Ldind_U2);
else if (t == TypeManager.byte_type)
ig.Emit (OpCodes.Ldind_U1);
else if (t == TypeManager.sbyte_type)
ig.Emit (OpCodes.Ldind_I1);
else if (t == TypeManager.uint64_type)
ig.Emit (OpCodes.Ldind_I8);
else if (t == TypeManager.int64_type)
ig.Emit (OpCodes.Ldind_I8);
else if (t == TypeManager.float_type)
ig.Emit (OpCodes.Ldind_R4);
else if (t == TypeManager.double_type)
ig.Emit (OpCodes.Ldind_R8);
else if (t == TypeManager.bool_type)
ig.Emit (OpCodes.Ldind_I1);
else if (t == TypeManager.intptr_type)
ig.Emit (OpCodes.Ldind_I);
else if (t.IsEnum) {
if (t == TypeManager.enum_type)
ig.Emit (OpCodes.Ldind_Ref);
else
EmitLoadFromPtr (EnumSpec.GetUnderlyingType (t));
} else if (TypeManager.IsStruct (t) || TypeManager.IsGenericParameter (t))
Emit (OpCodes.Ldobj, t);
else if (t.IsPointer)
ig.Emit (OpCodes.Ldind_I);
else
ig.Emit (OpCodes.Ldind_Ref);
}