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

◆ CompileCoalesceBinaryExpression()

void System.Linq.Expressions.Interpreter.LightCompiler.CompileCoalesceBinaryExpression ( Expression expr)
inlineprivate

Definition at line 1971 of file LightCompiler.cs.

1972 {
1973 BinaryExpression binaryExpression = (BinaryExpression)expr;
1974 bool flag = binaryExpression.Conversion != null;
1975 bool flag2 = false;
1976 if (!flag && binaryExpression.Left.Type.IsNullableType())
1977 {
1978 Type type = binaryExpression.Left.Type;
1979 if (!binaryExpression.Type.IsNullableType())
1980 {
1981 type = type.GetNonNullableType();
1982 }
1984 {
1985 flag2 = true;
1986 flag = true;
1987 }
1988 }
1989 BranchLabel branchLabel = _instructions.MakeLabel();
1990 BranchLabel label = null;
1995 if (flag)
1996 {
1999 }
2000 else if (binaryExpression.Right.Type.IsValueType && !TypeUtils.AreEquivalent(binaryExpression.Type, binaryExpression.Right.Type))
2001 {
2003 }
2005 if (binaryExpression.Conversion != null)
2006 {
2007 ParameterExpression parameterExpression = Expression.Parameter(binaryExpression.Left.Type, "temp");
2010 LambdaExpression? conversion = binaryExpression.Conversion;
2011 MethodInfo invokeMethod = binaryExpression.Conversion.Type.GetInvokeMethod();
2012 Expression[] arguments = new ParameterExpression[1] { parameterExpression };
2015 }
2016 else if (flag2)
2017 {
2018 Type nonNullableType = binaryExpression.Left.Type.GetNonNullableType();
2020 }
2021 if (flag)
2022 {
2024 }
2025 }
static bool AreEquivalent(Type t1, Type t2)
Definition TypeUtils.cs:664
void EmitBranch(OffsetInstruction instruction, BranchLabel label)
void Compile(Expression expr, bool asVoid)
void CompileConvertToType(Type typeFrom, Type typeTo, bool isChecked, bool isLiftedToNull)
void UndefineLocal(LocalDefinition definition, int end)
LocalDefinition DefineLocal(ParameterExpression variable, int start)

References System.Linq.Expressions.Interpreter.LightCompiler._instructions, System.Linq.Expressions.Interpreter.LightCompiler._locals, System.Dynamic.Utils.TypeUtils.AreEquivalent(), System.Linq.Expressions.Expression< TDelegate >.Call(), System.Linq.Expressions.Interpreter.LightCompiler.Compile(), System.Linq.Expressions.Interpreter.LightCompiler.CompileConvertToType(), System.Linq.Expressions.Interpreter.LightCompiler.CompileMethodCallExpression(), System.Linq.Expressions.Interpreter.InstructionList.Count, System.Linq.Expressions.Interpreter.LocalVariables.DefineLocal(), System.Linq.Expressions.Interpreter.InstructionList.EmitBranch(), System.Linq.Expressions.Interpreter.InstructionList.EmitCoalescingBranch(), System.Linq.Expressions.Interpreter.InstructionList.EmitPop(), System.Linq.Expressions.Interpreter.InstructionList.EmitStoreLocal(), System.Linq.Expressions.Interpreter.InstructionList.MakeLabel(), System.Linq.Expressions.Interpreter.InstructionList.MarkLabel(), System.Linq.Expressions.Expression< TDelegate >.Parameter(), System.type, and System.Linq.Expressions.Interpreter.LocalVariables.UndefineLocal().

Referenced by System.Linq.Expressions.Interpreter.LightCompiler.CompileNoLabelPush().