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

◆ EmitReferenceCoalesceWithoutConversion()

void System.Linq.Expressions.Compiler.LambdaCompiler.EmitReferenceCoalesceWithoutConversion ( BinaryExpression b)
inlineprivate

Definition at line 2526 of file LambdaCompiler.cs.

2527 {
2530 EmitExpression(b.Left);
2534 EmitExpression(b.Right);
2535 if (!TypeUtils.AreEquivalent(b.Right.Type, b.Type))
2536 {
2537 if (b.Right.Type.IsValueType)
2538 {
2539 _ilg.Emit(OpCodes.Box, b.Right.Type);
2540 }
2541 _ilg.Emit(OpCodes.Castclass, b.Type);
2542 }
2545 if (!TypeUtils.AreEquivalent(b.Left.Type, b.Type))
2546 {
2547 _ilg.Emit(OpCodes.Castclass, b.Type);
2548 }
2550 }
static bool AreEquivalent(Type t1, Type t2)
Definition TypeUtils.cs:664
virtual void MarkLabel(Label loc)
virtual void Emit(OpCode opcode)
static readonly OpCode Castclass
Definition OpCodes.cs:235
static readonly OpCode Brtrue
Definition OpCodes.cs:119
static readonly OpCode Br_S
Definition OpCodes.cs:89
static readonly OpCode Pop
Definition OpCodes.cs:79
static readonly OpCode Box
Definition OpCodes.cs:279
static readonly OpCode Dup
Definition OpCodes.cs:77

References System.Linq.Expressions.Compiler.LambdaCompiler._ilg, System.Dynamic.Utils.TypeUtils.AreEquivalent(), System.Reflection.Emit.OpCodes.Box, System.Reflection.Emit.OpCodes.Br_S, System.Reflection.Emit.OpCodes.Brtrue, System.Reflection.Emit.OpCodes.Castclass, System.Reflection.Emit.ILGenerator.DefineLabel(), System.Reflection.Emit.OpCodes.Dup, System.Reflection.Emit.ILGenerator.Emit(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitExpression(), System.Reflection.Emit.ILGenerator.MarkLabel(), and System.Reflection.Emit.OpCodes.Pop.

Referenced by System.Linq.Expressions.Compiler.LambdaCompiler.EmitCoalesceBinaryExpression().