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

◆ EmitConvert()

void System.Linq.Expressions.Compiler.LambdaCompiler.EmitConvert ( UnaryExpression node,
CompilationFlags flags )
inlineprivate

Definition at line 3650 of file LambdaCompiler.cs.

3651 {
3652 if (node.Method != null)
3653 {
3654 if (!node.IsLifted || (node.Type.IsValueType && node.Operand.Type.IsValueType))
3655 {
3656 EmitUnaryMethod(node, flags);
3657 return;
3658 }
3659 ParameterInfo[] parametersCached = node.Method.GetParametersCached();
3660 Type type = parametersCached[0].ParameterType;
3661 if (type.IsByRef)
3662 {
3663 type = type.GetElementType();
3664 }
3665 UnaryExpression arg = Expression.Convert(node.Operand, type);
3666 node = Expression.Convert(Expression.Call(node.Method, arg), node.Type);
3667 }
3668 if (node.Type == typeof(void))
3669 {
3670 EmitExpressionAsVoid(node.Operand, flags);
3671 return;
3672 }
3673 if (TypeUtils.AreEquivalent(node.Operand.Type, node.Type))
3674 {
3675 EmitExpression(node.Operand, flags);
3676 return;
3677 }
3678 EmitExpression(node.Operand);
3679 _ilg.EmitConvertToType(node.Operand.Type, node.Type, node.NodeType == ExpressionType.ConvertChecked, this);
3680 }
static bool AreEquivalent(Type t1, Type t2)
Definition TypeUtils.cs:664
void EmitUnaryMethod(UnaryExpression node, CompilationFlags flags)

References System.Linq.Expressions.Compiler.LambdaCompiler._ilg, System.Dynamic.Utils.TypeUtils.AreEquivalent(), System.Linq.Expressions.Expression< TDelegate >.Call(), System.Linq.Expressions.Expression< TDelegate >.Convert(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitExpression(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitExpressionAsVoid(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitUnaryMethod(), and System.type.

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