diff --git a/Platform.Reflection/ILGeneratorExtensions.cs b/Platform.Reflection/ILGeneratorExtensions.cs index fbbfd04..21eb445 100644 --- a/Platform.Reflection/ILGeneratorExtensions.cs +++ b/Platform.Reflection/ILGeneratorExtensions.cs @@ -38,38 +38,11 @@ public static class ILGeneratorExtensions } if (NumericType.BitsSize > NumericType.BitsSize) { - generator.ConvertToInteger(targetType); + generator.ConvertToInteger(targetType, extendSign: false); } else { - if (sourceType == typeof(uint) && targetType == typeof(long) && !extendSign) - { - generator.Emit(OpCodes.Conv_U8); - } -#if NETFRAMEWORK - else if (sourceType == typeof(uint) && targetType == typeof(long) && extendSign) - { - generator.Emit(OpCodes.Conv_I8); - } - else if (sourceType == typeof(byte) || sourceType == typeof(ushort)) - { - if (targetType == typeof(long)) - { - if (extendSign) - { - generator.Emit(OpCodes.Conv_I8); - } - else - { - generator.Emit(OpCodes.Conv_U8); - } - } - } - else - { - generator.ConvertToInteger(targetType); - } -#endif + generator.ConvertToInteger(targetType, extendSign); } if (targetType == typeof(float)) { @@ -111,7 +84,7 @@ private static void ConvertToBoolean(this ILGenerator generator) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void ConvertToInteger(this ILGenerator generator, Type targetType) + private static void ConvertToInteger(this ILGenerator generator, Type targetType, bool extendSign) { if (targetType == typeof(sbyte)) { @@ -137,13 +110,16 @@ private static void ConvertToInteger(this ILGenerator generator, Type targetType { generator.Emit(OpCodes.Conv_U4); } - else if (targetType == typeof(long)) - { - generator.Emit(OpCodes.Conv_I8); - } - else if (targetType == typeof(ulong)) + else if (targetType == typeof(long) || targetType == typeof(ulong)) { - generator.Emit(OpCodes.Conv_U8); + if (NumericType.IsSigned || extendSign) + { + generator.Emit(OpCodes.Conv_I8); + } + else + { + generator.Emit(OpCodes.Conv_U8); + } } }