45 switch (
type.GetTypeCode())
90 switch (
type.GetTypeCode())
117 if (
type.IsValueType)
129 if (!
type.IsValueType)
134 switch (
type.GetTypeCode())
174 switch (
type.GetTypeCode())
201 if (
type.IsValueType)
259 il.EmitPrimitive((
int)
value);
264 if (
int.MinValue <=
value &&
value <= uint.MaxValue)
266 il.EmitPrimitive((
int)
value);
277 il.EmitPrimitive((
long)
value);
309 TypeCode typeCode =
type.GetNonNullableType().GetTypeCode();
310 if ((uint)(typeCode - 3) <= 12u || typeCode ==
TypeCode.String)
321 il.EmitDefault(
type, locals);
379 if (!(declaringType ==
null))
388 if (
type.IsNullableType())
390 Type nonNullableType =
type.GetNonNullableType();
391 if (il.TryEmitILConstant(
value, nonNullableType))
398 switch (
type.GetTypeCode())
401 il.EmitPrimitive((
bool)
value);
404 il.EmitPrimitive((sbyte)
value);
407 il.EmitPrimitive((
short)
value);
410 il.EmitPrimitive((
int)
value);
413 il.EmitPrimitive((
long)
value);
416 il.EmitPrimitive((
float)
value);
419 il.EmitPrimitive((
double)
value);
422 il.EmitPrimitive((
char)
value);
425 il.EmitPrimitive((
byte)
value);
428 il.EmitPrimitive((ushort)
value);
431 il.EmitPrimitive((uint)
value);
434 il.EmitPrimitive((ulong)
value);
437 il.EmitDecimal((decimal)
value);
440 il.EmitString((
string)
value);
451 bool flag = typeFrom.IsNullableType();
452 bool flag2 = typeTo.IsNullableType();
453 Type nonNullableType = typeFrom.GetNonNullableType();
454 Type nonNullableType2 = typeTo.GetNonNullableType();
457 il.EmitCastToType(typeFrom, typeTo);
459 else if (flag || flag2)
461 il.EmitNullableConversion(typeFrom, typeTo, isChecked, locals);
463 else if ((!typeFrom.IsConvertible() || !typeTo.IsConvertible()) && (nonNullableType.
IsAssignableFrom(nonNullableType2) || nonNullableType2.
IsAssignableFrom(nonNullableType)))
465 il.EmitCastToType(typeFrom, typeTo);
469 il.EmitCastToType(typeFrom, typeTo);
473 il.EmitNumericConversion(typeFrom, typeTo, isChecked);
483 if (typeTo != typeof(
object))
498 if (typeCode == typeCode2)
502 bool flag = typeCode2.IsUnsigned();
632 if (!isChecked && typeCode2 ==
TypeCode.UInt64)
639 if (!isChecked && typeCode2 ==
TypeCode.Int64)
656 il.EmitHasValue(typeFrom);
661 il.EmitGetValueOrDefault(typeFrom);
662 Type nonNullableType = typeFrom.GetNonNullableType();
663 Type nonNullableType2 = typeTo.GetNonNullableType();
664 il.EmitConvertToType(nonNullableType, nonNullableType2, isChecked, locals);
680 Type nonNullableType = typeTo.GetNonNullableType();
681 il.EmitConvertToType(typeFrom, nonNullableType, isChecked, locals);
690 il.EmitNullableToNonNullableStructConversion(typeFrom, typeTo, isChecked, locals);
694 il.EmitNullableToReferenceConversion(typeFrom);
704 il.EmitGetValue(typeFrom);
705 Type nonNullableType = typeFrom.GetNonNullableType();
706 il.EmitConvertToType(nonNullableType, typeTo, isChecked, locals);
716 bool flag = typeFrom.IsNullableType();
717 bool flag2 = typeTo.IsNullableType();
720 il.EmitNullableToNullableConversion(typeFrom, typeTo, isChecked, locals);
724 il.EmitNullableToNonNullableConversion(typeFrom, typeTo, isChecked, locals);
728 il.EmitNonNullableToNullableConversion(typeFrom, typeTo, isChecked, locals);
752 il.EmitPrimitive(
count);
756 [UnconditionalSuppressMessage(
"ReflectionAnalysis",
"IL2070:UnrecognizedReflectionPattern", Justification =
"The Array ctor is dynamically constructed and is not included in IL. It is not subject to trimming.")]
765 for (
int i = 0; i <
array.Length; i++)
767 array[i] = typeof(
int);
770 il.EmitNew(constructor);
780 if (-2147483648m <=
value)
782 if (
value <= 2147483647m)
784 int num2 = decimal.ToInt32(
value);
791 il.EmitDefault(typeof(decimal),
null);
797 il.EmitPrimitive(num2);
803 if (
value <= 4294967295m)
805 il.EmitPrimitive(decimal.ToUInt32(
value));
810 if (-9223372036854775808m <=
value)
812 if (
value <= 9223372036854775807m)
814 il.EmitPrimitive(decimal.ToInt64(
value));
818 if (
value <= 18446744073709551615m)
820 il.EmitPrimitive(decimal.ToUInt64(
value));
824 if (
value == decimal.MaxValue)
830 else if (
value == decimal.MinValue)
839 il.EmitPrimitive((
destination[3] & 0x80000000u) != 0);
840 il.EmitPrimitive((
byte)num);
846 switch (
type.GetTypeCode())
852 if (
type.IsValueType)
static Exception Unreachable
static ConstructorInfo GetNullableConstructor(Type nullableType)
static bool IsLegalExplicitVariantDelegateConversion(Type source, Type dest)
static bool AreEquivalent(Type t1, Type t2)
static ConstructorInfo Decimal_Ctor_Int64
static ConstructorInfo Decimal_Ctor_Int32_Int32_Int32_Bool_Byte
static MethodInfo Decimal_op_Implicit_SByte
static FieldInfo Decimal_Zero
static MethodInfo Decimal_op_Implicit_Int16
static MethodInfo Decimal_op_Implicit_Int64
static ConstructorInfo Decimal_Ctor_UInt64
static FieldInfo DateTime_MinValue
static ConstructorInfo Decimal_Ctor_Int32
static MethodInfo Decimal_op_Implicit_Byte
static FieldInfo Decimal_MinValue
static MethodInfo Decimal_op_Implicit_UInt64
static MethodInfo Decimal_op_Implicit_Int32
static FieldInfo Decimal_MaxValue
static MethodInfo Decimal_op_Implicit_UInt16
static MethodInfo Type_GetTypeFromHandle
static ConstructorInfo Decimal_Ctor_UInt32
static MethodInfo Decimal_op_Implicit_UInt32
static FieldInfo Decimal_One
static MethodInfo Decimal_op_Implicit_Char
static MethodInfo MethodBase_GetMethodFromHandle_RuntimeMethodHandle
static MethodInfo MethodBase_GetMethodFromHandle_RuntimeMethodHandle_RuntimeTypeHandle
static FieldInfo Decimal_MinusOne
static void EmitNullableConversion(this ILGenerator il, Type typeFrom, Type typeTo, bool isChecked, ILocalCache locals)
static void EmitArray(this ILGenerator il, Type elementType, int count)
static void EmitNullableToNonNullableStructConversion(this ILGenerator il, Type typeFrom, Type typeTo, bool isChecked, ILocalCache locals)
static bool ShouldLdtoken(MethodBase mb)
static void EmitNullableToReferenceConversion(this ILGenerator il, Type typeFrom)
static void EmitCastToType(this ILGenerator il, Type typeFrom, Type typeTo)
static void EmitGetValueOrDefault(this ILGenerator il, Type nullableType)
static void EmitType(this ILGenerator il, Type type)
static void EmitNumericConversion(this ILGenerator il, Type typeFrom, Type typeTo, bool isChecked)
static bool TryEmitILConstant(this ILGenerator il, object value, Type type)
static void EmitLoadArgAddress(this ILGenerator il, int index)
static void EmitGetValue(this ILGenerator il, Type nullableType)
static bool TryEmitConstant(this ILGenerator il, object value, Type type, ILocalCache locals)
static void EmitFieldAddress(this ILGenerator il, FieldInfo fi)
static void Emit(this ILGenerator il, OpCode opcode, MethodBase methodBase)
static bool CanEmitILConstant(Type type)
static void EmitPrimitive(this ILGenerator il, double value)
static void EmitFieldGet(this ILGenerator il, FieldInfo fi)
static void EmitDecimal(this ILGenerator il, decimal value)
static void EmitStoreValueIndirect(this ILGenerator il, Type type)
static bool CanEmitConstant(object value, Type type)
static void EmitNull(this ILGenerator il)
static void EmitHasValue(this ILGenerator il, Type nullableType)
static void EmitLoadValueIndirect(this ILGenerator il, Type type)
static bool ShouldLdtoken(Type t)
static void EmitNullableToNullableConversion(this ILGenerator il, Type typeFrom, Type typeTo, bool isChecked, ILocalCache locals)
static void EmitLoadArg(this ILGenerator il, int index)
static void EmitArray(this ILGenerator il, Type arrayType)
static void EmitNullableToNonNullableConversion(this ILGenerator il, Type typeFrom, Type typeTo, bool isChecked, ILocalCache locals)
static void EmitConvertToType(this ILGenerator il, Type typeFrom, Type typeTo, bool isChecked, ILocalCache locals)
static readonly MethodInfo s_nullableHasValueGetter
static void EmitPrimitive(this ILGenerator il, bool value)
static void EmitString(this ILGenerator il, string value)
static void EmitPrimitive(this ILGenerator il, ulong value)
static void EmitDefault(this ILGenerator il, Type type, ILocalCache locals)
static void EmitNonNullableToNullableConversion(this ILGenerator il, Type typeFrom, Type typeTo, bool isChecked, ILocalCache locals)
static readonly MethodInfo s_nullableGetValueOrDefault
static void EmitLoadElement(this ILGenerator il, Type type)
static readonly MethodInfo s_nullableValueGetter
static void EmitPrimitive(this ILGenerator il, float value)
static void EmitFieldSet(this ILGenerator il, FieldInfo fi)
static void EmitStoreElement(this ILGenerator il, Type type)
static void EmitPrimitive(this ILGenerator il, long value)
static void EmitPrimitive(this ILGenerator il, int value)
static void EmitStoreArg(this ILGenerator il, int index)
static void EmitPrimitive(this ILGenerator il, uint value)
static void EmitNew(this ILGenerator il, ConstructorInfo ci)
virtual void MarkLabel(Label loc)
virtual void Emit(OpCode opcode)
virtual Label DefineLabel()
static readonly OpCode Castclass
static readonly OpCode Ldloca
static readonly OpCode Ldelem_I2
static readonly OpCode Ldelem_U2
static readonly OpCode Stind_R8
static readonly OpCode Conv_I4
static readonly OpCode Stind_I1
static readonly OpCode Unbox_Any
static readonly OpCode Ldsflda
static readonly OpCode Ldc_I8
static readonly OpCode Conv_R_Un
static readonly OpCode Ldind_I1
static readonly OpCode Br_S
static readonly OpCode Conv_I2
static readonly OpCode Stind_I2
static readonly OpCode Stloc
static readonly OpCode Ldind_R4
static readonly OpCode Conv_Ovf_U1
static readonly OpCode Conv_Ovf_I1
static readonly OpCode Ldind_I2
static readonly OpCode Newobj
static readonly OpCode Ldind_I4
static readonly OpCode Ldflda
static readonly OpCode Ldind_U2
static readonly OpCode Ldelem
static readonly OpCode Conv_I1
static readonly OpCode Ldind_U4
static readonly OpCode Ldelem_U4
static readonly OpCode Ldind_R8
static readonly OpCode Ldind_I8
static readonly OpCode Stind_I8
static readonly OpCode Ldobj
static readonly OpCode Ldc_I4
static readonly OpCode Stelem_Ref
static readonly OpCode Stsfld
static readonly OpCode Conv_Ovf_I2
static readonly OpCode Conv_Ovf_I8
static readonly OpCode Initobj
static readonly OpCode Conv_U1
static readonly OpCode Stelem_I4
static readonly OpCode Conv_Ovf_U8
static readonly OpCode Ldfld
static readonly OpCode Stind_I4
static readonly OpCode Ldarga
static readonly OpCode Conv_U4
static readonly OpCode Ldelem_Ref
static readonly OpCode Ldc_I4_1
static readonly OpCode Ldc_I4_0
static readonly OpCode Stelem_I8
static readonly OpCode Conv_Ovf_U8_Un
static readonly OpCode Ldstr
static readonly OpCode Conv_R4
static readonly OpCode Conv_U2
static readonly OpCode Stobj
static readonly OpCode Ldind_U1
static readonly OpCode Ldsfld
static readonly OpCode Stelem_I1
static readonly OpCode Ldelem_I4
static readonly OpCode Ldelem_R4
static readonly OpCode Ldelem_U1
static readonly OpCode Ldtoken
static readonly OpCode Call
static readonly OpCode Stelem
static readonly OpCode Stelem_R4
static readonly OpCode Conv_R8
static readonly OpCode Ldloc
static readonly OpCode Ldnull
static readonly OpCode Conv_Ovf_I4
static readonly OpCode Stind_R4
static readonly OpCode Brfalse_S
static readonly OpCode Ldc_R4
static readonly OpCode Starg
static readonly OpCode Box
static readonly OpCode Conv_Ovf_U4
static readonly OpCode Ldind_Ref
static readonly OpCode Conv_U8
static readonly OpCode Ldc_R8
static readonly OpCode Stelem_I2
static readonly OpCode Conv_Ovf_U2
static readonly OpCode Stelem_R8
static readonly OpCode Stind_Ref
static readonly OpCode Stfld
static readonly OpCode Newarr
static readonly OpCode Ldarg
static readonly OpCode Ldelem_I1
static readonly OpCode Conv_I8
static readonly OpCode Ldelem_R8
static readonly OpCode Ldelem_I8
virtual bool IsAssignableFrom([NotNullWhen(true)] Type? c)
virtual bool IsGenericParameter
virtual MemberInfo GetMemberWithSameMetadataDefinitionAs(MemberInfo member)
virtual int GetArrayRank()
static TypeCode GetTypeCode(Type? type)
ConstructorInfo? GetConstructor(Type[] types)
virtual bool IsGenericType
override? Type DeclaringType
static readonly Type[] EmptyTypes
LocalBuilder GetLocal(Type type)
void FreeLocal(LocalBuilder local)