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

◆ EmitBranchComparison()

void System.Linq.Expressions.Compiler.LambdaCompiler.EmitBranchComparison ( bool branch,
BinaryExpression node,
Label label )
inlineprivate

Definition at line 2767 of file LambdaCompiler.cs.

2768 {
2769 bool flag = branch == (node.NodeType == ExpressionType.Equal);
2770 if (node.Method != null)
2771 {
2772 EmitBinaryMethod(node, CompilationFlags.EmitAsNoTail);
2774 }
2775 else if (ConstantCheck.IsNull(node.Left))
2776 {
2777 if (node.Right.Type.IsNullableType())
2778 {
2779 EmitAddress(node.Right, node.Right.Type);
2780 _ilg.EmitHasValue(node.Right.Type);
2781 }
2782 else
2783 {
2785 }
2786 EmitBranchOp(!flag, label);
2787 }
2788 else if (ConstantCheck.IsNull(node.Right))
2789 {
2790 if (node.Left.Type.IsNullableType())
2791 {
2792 EmitAddress(node.Left, node.Left.Type);
2793 _ilg.EmitHasValue(node.Left.Type);
2794 }
2795 else
2796 {
2798 }
2799 EmitBranchOp(!flag, label);
2800 }
2801 else if (node.Left.Type.IsNullableType() || node.Right.Type.IsNullableType())
2802 {
2805 }
2806 else
2807 {
2810 _ilg.Emit(flag ? OpCodes.Beq : OpCodes.Bne_Un, label);
2811 }
2812 }
void EmitAddress(Expression node, Type type)
static Expression GetEqualityOperand(Expression expression)
void EmitBinaryMethod(BinaryExpression b, CompilationFlags flags)
virtual void Emit(OpCode opcode)
static readonly OpCode Beq
Definition OpCodes.cs:121

References System.Linq.Expressions.Compiler.LambdaCompiler._ilg, System.Reflection.Emit.OpCodes.Beq, System.Reflection.Emit.OpCodes.Bne_Un, System.Reflection.Emit.ILGenerator.Emit(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitAddress(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitBinaryExpression(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitBinaryMethod(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitBranchOp(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitExpression(), System.Linq.Expressions.Compiler.LambdaCompiler.GetEqualityOperand(), and System.Linq.Expressions.ConstantCheck.IsNull().

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