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

◆ Convert()

static void System.Reflection.DispatchProxyGenerator.ProxyBuilder.Convert ( ILGenerator il,
Type source,
Type target,
bool isAddress )
inlinestaticprivate

Definition at line 590 of file DispatchProxyGenerator.cs.

591 {
592 if (target == source)
593 {
594 return;
595 }
596 if (source.IsByRef)
597 {
598 Type elementType = source.GetElementType();
600 Convert(il, elementType, target, isAddress);
601 }
602 else if (target.IsValueType)
603 {
604 if (source.IsValueType)
605 {
606 OpCode opcode = s_convOpCodes[GetTypeCode(target)];
607 il.Emit(opcode);
608 return;
609 }
610 il.Emit(OpCodes.Unbox, target);
611 if (!isAddress)
612 {
613 Ldind(il, target);
614 }
615 }
616 else if (target.IsAssignableFrom(source))
617 {
618 if (source.IsValueType || source.IsGenericParameter)
619 {
620 if (isAddress)
621 {
622 Ldind(il, source);
623 }
624 il.Emit(OpCodes.Box, source);
625 }
626 }
627 else if (target.IsGenericParameter)
628 {
629 il.Emit(OpCodes.Unbox_Any, target);
630 }
631 else
632 {
633 il.Emit(OpCodes.Castclass, target);
634 }
635 }
static void Convert(ILGenerator il, Type source, Type target, bool isAddress)
static readonly OpCode Castclass
Definition OpCodes.cs:235
static readonly OpCode Unbox
Definition OpCodes.cs:241
static readonly OpCode Unbox_Any
Definition OpCodes.cs:329
static readonly OpCode Box
Definition OpCodes.cs:279

References System.Reflection.Emit.OpCodes.Box, System.Reflection.Emit.OpCodes.Castclass, System.Reflection.DispatchProxyGenerator.ProxyBuilder.Convert(), System.elementType, System.Type.GetElementType(), System.Reflection.DispatchProxyGenerator.ProxyBuilder.GetTypeCode(), System.Type.IsAssignableFrom(), System.Type.IsGenericParameter, System.Type.IsValueType, System.Reflection.DispatchProxyGenerator.ProxyBuilder.Ldind(), System.Reflection.DispatchProxyGenerator.ProxyBuilder.s_convOpCodes, System.source, System.Reflection.Emit.OpCodes.Unbox, and System.Reflection.Emit.OpCodes.Unbox_Any.

Referenced by System.Reflection.DispatchProxyGenerator.ProxyBuilder.AddMethodImpl(), System.Reflection.DispatchProxyGenerator.ProxyBuilder.Convert(), System.Reflection.DispatchProxyGenerator.ProxyBuilder.ParametersArray.EndSet(), and System.Reflection.DispatchProxyGenerator.ProxyBuilder.GenericArray< T >.EndSet().