Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ EmitDecimal()

static void System.Linq.Expressions.Compiler.ILGen.EmitDecimal ( this ILGenerator il,
decimal value )
inlinestaticprivate

Definition at line 773 of file ILGen.cs.

774 {
775 Span<int> destination = stackalloc int[4];
776 decimal.GetBits(value, destination);
777 int num = (destination[3] & 0x7FFFFFFF) >> 16;
778 if (num == 0)
779 {
780 if (-2147483648m <= value)
781 {
782 if (value <= 2147483647m)
783 {
784 int num2 = decimal.ToInt32(value);
785 switch (num2)
786 {
787 case -1:
788 il.Emit(OpCodes.Ldsfld, CachedReflectionInfo.Decimal_MinusOne);
789 break;
790 case 0:
791 il.EmitDefault(typeof(decimal), null);
792 break;
793 case 1:
794 il.Emit(OpCodes.Ldsfld, CachedReflectionInfo.Decimal_One);
795 break;
796 default:
797 il.EmitPrimitive(num2);
798 il.EmitNew(CachedReflectionInfo.Decimal_Ctor_Int32);
799 break;
800 }
801 return;
802 }
803 if (value <= 4294967295m)
804 {
805 il.EmitPrimitive(decimal.ToUInt32(value));
806 il.EmitNew(CachedReflectionInfo.Decimal_Ctor_UInt32);
807 return;
808 }
809 }
810 if (-9223372036854775808m <= value)
811 {
812 if (value <= 9223372036854775807m)
813 {
814 il.EmitPrimitive(decimal.ToInt64(value));
815 il.EmitNew(CachedReflectionInfo.Decimal_Ctor_Int64);
816 return;
817 }
818 if (value <= 18446744073709551615m)
819 {
820 il.EmitPrimitive(decimal.ToUInt64(value));
821 il.EmitNew(CachedReflectionInfo.Decimal_Ctor_UInt64);
822 return;
823 }
824 if (value == decimal.MaxValue)
825 {
826 il.Emit(OpCodes.Ldsfld, CachedReflectionInfo.Decimal_MaxValue);
827 return;
828 }
829 }
830 else if (value == decimal.MinValue)
831 {
832 il.Emit(OpCodes.Ldsfld, CachedReflectionInfo.Decimal_MinValue);
833 return;
834 }
835 }
836 il.EmitPrimitive(destination[0]);
837 il.EmitPrimitive(destination[1]);
838 il.EmitPrimitive(destination[2]);
839 il.EmitPrimitive((destination[3] & 0x80000000u) != 0);
840 il.EmitPrimitive((byte)num);
841 il.EmitNew(CachedReflectionInfo.Decimal_Ctor_Int32_Int32_Int32_Bool_Byte);
842 }
static readonly OpCode Ldsfld
Definition OpCodes.cs:251

References System.Linq.Expressions.CachedReflectionInfo.Decimal_Ctor_Int32, System.Linq.Expressions.CachedReflectionInfo.Decimal_Ctor_Int32_Int32_Int32_Bool_Byte, System.Linq.Expressions.CachedReflectionInfo.Decimal_Ctor_Int64, System.Linq.Expressions.CachedReflectionInfo.Decimal_Ctor_UInt32, System.Linq.Expressions.CachedReflectionInfo.Decimal_Ctor_UInt64, System.Linq.Expressions.CachedReflectionInfo.Decimal_MaxValue, System.Linq.Expressions.CachedReflectionInfo.Decimal_MinusOne, System.Linq.Expressions.CachedReflectionInfo.Decimal_MinValue, System.Linq.Expressions.CachedReflectionInfo.Decimal_One, System.destination, System.Reflection.Emit.ILGenerator.Emit(), System.Reflection.Emit.OpCodes.Ldsfld, and System.value.