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

◆ EmitNullableToNullableConversion()

static void System.Linq.Expressions.Compiler.ILGen.EmitNullableToNullableConversion ( this ILGenerator il,
Type typeFrom,
Type typeTo,
bool isChecked,
ILocalCache locals )
inlinestaticprivate

Definition at line 651 of file ILGen.cs.

652 {
653 LocalBuilder local = locals.GetLocal(typeFrom);
654 il.Emit(OpCodes.Stloc, local);
655 il.Emit(OpCodes.Ldloca, local);
656 il.EmitHasValue(typeFrom);
657 Label label = il.DefineLabel();
658 il.Emit(OpCodes.Brfalse_S, label);
659 il.Emit(OpCodes.Ldloca, local);
660 locals.FreeLocal(local);
661 il.EmitGetValueOrDefault(typeFrom);
662 Type nonNullableType = typeFrom.GetNonNullableType();
663 Type nonNullableType2 = typeTo.GetNonNullableType();
664 il.EmitConvertToType(nonNullableType, nonNullableType2, isChecked, locals);
665 ConstructorInfo nullableConstructor = TypeUtils.GetNullableConstructor(typeTo);
666 il.Emit(OpCodes.Newobj, nullableConstructor);
667 Label label2 = il.DefineLabel();
668 il.Emit(OpCodes.Br_S, label2);
669 il.MarkLabel(label);
670 LocalBuilder local2 = locals.GetLocal(typeTo);
671 il.Emit(OpCodes.Ldloca, local2);
672 il.Emit(OpCodes.Initobj, typeTo);
673 il.Emit(OpCodes.Ldloc, local2);
674 locals.FreeLocal(local2);
675 il.MarkLabel(label2);
676 }
static ConstructorInfo GetNullableConstructor(Type nullableType)
Definition TypeUtils.cs:34
static readonly OpCode Ldloca
Definition OpCodes.cs:427
static readonly OpCode Br_S
Definition OpCodes.cs:89
static readonly OpCode Stloc
Definition OpCodes.cs:429
static readonly OpCode Newobj
Definition OpCodes.cs:233
static readonly OpCode Initobj
Definition OpCodes.cs:441
static readonly OpCode Ldloc
Definition OpCodes.cs:425
static readonly OpCode Brfalse_S
Definition OpCodes.cs:91

References System.Reflection.Emit.OpCodes.Br_S, System.Reflection.Emit.OpCodes.Brfalse_S, System.Reflection.Emit.ILGenerator.DefineLabel(), System.Reflection.Emit.ILGenerator.Emit(), System.Linq.Expressions.Compiler.ILocalCache.FreeLocal(), System.Linq.Expressions.Compiler.ILocalCache.GetLocal(), System.Dynamic.Utils.TypeUtils.GetNullableConstructor(), System.Reflection.Emit.OpCodes.Initobj, System.Reflection.Emit.OpCodes.Ldloc, System.Reflection.Emit.OpCodes.Ldloca, System.Reflection.Emit.ILGenerator.MarkLabel(), System.Reflection.Emit.OpCodes.Newobj, and System.Reflection.Emit.OpCodes.Stloc.