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

◆ EmitUnaryOperator()

void System.Linq.Expressions.Compiler.LambdaCompiler.EmitUnaryOperator ( ExpressionType op,
Type operandType,
Type resultType )
inlineprivate

Definition at line 3514 of file LambdaCompiler.cs.

3515 {
3516 bool flag = operandType.IsNullableType();
3517 if (op == ExpressionType.ArrayLength)
3518 {
3520 return;
3521 }
3522 if (flag)
3523 {
3524 switch (op)
3525 {
3526 case ExpressionType.UnaryPlus:
3527 return;
3528 case ExpressionType.TypeAs:
3529 if (operandType != resultType)
3530 {
3533 if (resultType.IsNullableType())
3534 {
3536 }
3537 }
3538 return;
3539 }
3545 _ilg.EmitHasValue(operandType);
3548 _ilg.EmitGetValueOrDefault(operandType);
3549 Type nonNullableType = resultType.GetNonNullableType();
3558 return;
3559 }
3560 switch (op)
3561 {
3562 case ExpressionType.Not:
3563 if (operandType == typeof(bool))
3564 {
3567 return;
3568 }
3569 goto case ExpressionType.OnesComplement;
3570 case ExpressionType.OnesComplement:
3572 if (!operandType.IsUnsigned())
3573 {
3574 return;
3575 }
3576 break;
3577 case ExpressionType.IsFalse:
3580 return;
3581 case ExpressionType.IsTrue:
3584 return;
3585 case ExpressionType.UnaryPlus:
3586 return;
3587 case ExpressionType.Negate:
3588 case ExpressionType.NegateChecked:
3590 return;
3591 case ExpressionType.TypeAs:
3592 if (operandType != resultType)
3593 {
3594 if (operandType.IsValueType)
3595 {
3597 }
3599 if (resultType.IsNullableType())
3600 {
3602 }
3603 }
3604 return;
3605 case ExpressionType.Increment:
3608 break;
3609 case ExpressionType.Decrement:
3612 break;
3613 }
3615 }
static ConstructorInfo GetNullableConstructor(Type nullableType)
Definition TypeUtils.cs:34
void EmitConvertArithmeticResult(ExpressionType op, Type resultType)
void EmitUnaryOperator(ExpressionType op, Type operandType, Type resultType)
virtual void MarkLabel(Label loc)
virtual void Emit(OpCode opcode)
static readonly OpCode Ldloca
Definition OpCodes.cs:427
static readonly OpCode Unbox_Any
Definition OpCodes.cs:329
static readonly OpCode Br_S
Definition OpCodes.cs:89
static readonly OpCode Stloc
Definition OpCodes.cs:429
static readonly OpCode Newobj
Definition OpCodes.cs:233
static readonly OpCode Add
Definition OpCodes.cs:179
static readonly OpCode Ceq
Definition OpCodes.cs:405
static readonly OpCode Ldc_I4_1
Definition OpCodes.cs:51
static readonly OpCode Sub
Definition OpCodes.cs:181
static readonly OpCode Ldc_I4_0
Definition OpCodes.cs:49
static readonly OpCode Isinst
Definition OpCodes.cs:237
static readonly OpCode Ldloc
Definition OpCodes.cs:425
static readonly OpCode Brfalse_S
Definition OpCodes.cs:91
static readonly OpCode Box
Definition OpCodes.cs:279
static readonly OpCode Neg
Definition OpCodes.cs:205
static readonly OpCode Not
Definition OpCodes.cs:207
static readonly OpCode Ldlen
Definition OpCodes.cs:283

References System.Linq.Expressions.Compiler.LambdaCompiler._ilg, System.Reflection.Emit.OpCodes.Add, System.Reflection.Emit.OpCodes.Box, System.Reflection.Emit.OpCodes.Br_S, System.Reflection.Emit.OpCodes.Brfalse_S, System.Reflection.Emit.OpCodes.Ceq, System.Reflection.Emit.ILGenerator.DefineLabel(), System.Reflection.Emit.ILGenerator.Emit(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitConstantOne(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitConvertArithmeticResult(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitUnaryOperator(), System.Linq.Expressions.Compiler.LambdaCompiler.FreeLocal(), System.Linq.Expressions.Compiler.LambdaCompiler.GetLocal(), System.Dynamic.Utils.TypeUtils.GetNullableConstructor(), System.Reflection.Emit.OpCodes.Isinst, System.Reflection.Emit.OpCodes.Ldc_I4_0, System.Reflection.Emit.OpCodes.Ldc_I4_1, System.Reflection.Emit.OpCodes.Ldlen, System.Reflection.Emit.OpCodes.Ldloc, System.Reflection.Emit.OpCodes.Ldloca, System.Reflection.Emit.ILGenerator.MarkLabel(), System.Reflection.Emit.OpCodes.Neg, System.Reflection.Emit.OpCodes.Newobj, System.Reflection.Emit.OpCodes.Not, System.Reflection.Emit.OpCodes.Stloc, System.Reflection.Emit.OpCodes.Sub, and System.Reflection.Emit.OpCodes.Unbox_Any.

Referenced by System.Linq.Expressions.Compiler.LambdaCompiler.EmitUnary(), and System.Linq.Expressions.Compiler.LambdaCompiler.EmitUnaryOperator().