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

◆ EmitUnliftedBinaryOp()

void System.Linq.Expressions.Compiler.LambdaCompiler.EmitUnliftedBinaryOp ( ExpressionType op,
Type leftType,
Type rightType )
inlineprivate

Definition at line 460 of file LambdaCompiler.cs.

461 {
462 switch (op)
463 {
464 case ExpressionType.NotEqual:
465 if (leftType.GetTypeCode() != TypeCode.Boolean)
466 {
469 goto case ExpressionType.Equal;
470 }
471 goto case ExpressionType.ExclusiveOr;
472 case ExpressionType.Equal:
474 return;
475 case ExpressionType.Add:
477 break;
478 case ExpressionType.AddChecked:
479 _ilg.Emit(leftType.IsFloatingPoint() ? OpCodes.Add : (leftType.IsUnsigned() ? OpCodes.Add_Ovf_Un : OpCodes.Add_Ovf));
480 break;
481 case ExpressionType.Subtract:
483 break;
484 case ExpressionType.SubtractChecked:
485 if (leftType.IsUnsigned())
486 {
488 return;
489 }
490 _ilg.Emit(leftType.IsFloatingPoint() ? OpCodes.Sub : OpCodes.Sub_Ovf);
491 break;
492 case ExpressionType.Multiply:
494 break;
495 case ExpressionType.MultiplyChecked:
496 _ilg.Emit(leftType.IsFloatingPoint() ? OpCodes.Mul : (leftType.IsUnsigned() ? OpCodes.Mul_Ovf_Un : OpCodes.Mul_Ovf));
497 break;
498 case ExpressionType.Divide:
499 _ilg.Emit(leftType.IsUnsigned() ? OpCodes.Div_Un : OpCodes.Div);
500 break;
501 case ExpressionType.Modulo:
502 _ilg.Emit(leftType.IsUnsigned() ? OpCodes.Rem_Un : OpCodes.Rem);
503 return;
504 case ExpressionType.And:
505 case ExpressionType.AndAlso:
507 return;
508 case ExpressionType.Or:
509 case ExpressionType.OrElse:
511 return;
512 case ExpressionType.LessThan:
513 _ilg.Emit(leftType.IsUnsigned() ? OpCodes.Clt_Un : OpCodes.Clt);
514 return;
515 case ExpressionType.LessThanOrEqual:
516 _ilg.Emit((leftType.IsUnsigned() || leftType.IsFloatingPoint()) ? OpCodes.Cgt_Un : OpCodes.Cgt);
519 return;
520 case ExpressionType.GreaterThan:
521 _ilg.Emit(leftType.IsUnsigned() ? OpCodes.Cgt_Un : OpCodes.Cgt);
522 return;
523 case ExpressionType.GreaterThanOrEqual:
524 _ilg.Emit((leftType.IsUnsigned() || leftType.IsFloatingPoint()) ? OpCodes.Clt_Un : OpCodes.Clt);
527 return;
528 case ExpressionType.ExclusiveOr:
530 return;
531 case ExpressionType.LeftShift:
534 break;
535 case ExpressionType.RightShift:
537 _ilg.Emit(leftType.IsUnsigned() ? OpCodes.Shr_Un : OpCodes.Shr);
538 return;
539 }
541 }
void Add(TKey key, TValue value)
void EmitConvertArithmeticResult(ExpressionType op, Type resultType)
virtual void Emit(OpCode opcode)
static readonly OpCode Mul
Definition OpCodes.cs:183
static readonly OpCode Or
Definition OpCodes.cs:195
static readonly OpCode Div_Un
Definition OpCodes.cs:187
static readonly OpCode Rem_Un
Definition OpCodes.cs:191
static readonly OpCode Add
Definition OpCodes.cs:179
static readonly OpCode And
Definition OpCodes.cs:193
static readonly OpCode Shl
Definition OpCodes.cs:199
static readonly OpCode Ceq
Definition OpCodes.cs:405
static readonly OpCode Sub
Definition OpCodes.cs:181
static readonly OpCode Ldc_I4_0
Definition OpCodes.cs:49
static readonly OpCode Shr_Un
Definition OpCodes.cs:203
static readonly OpCode Clt_Un
Definition OpCodes.cs:413
static readonly OpCode Xor
Definition OpCodes.cs:197
static readonly OpCode Sub_Ovf_Un
Definition OpCodes.cs:375
static readonly OpCode Cgt_Un
Definition OpCodes.cs:409

References System.Linq.Expressions.Compiler.LambdaCompiler._ilg, System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Reflection.Emit.OpCodes.Add, System.Reflection.Emit.OpCodes.Add_Ovf, System.Reflection.Emit.OpCodes.And, System.Reflection.Emit.OpCodes.Ceq, System.Reflection.Emit.OpCodes.Cgt, System.Reflection.Emit.OpCodes.Cgt_Un, System.Reflection.Emit.OpCodes.Clt, System.Reflection.Emit.OpCodes.Div, System.Reflection.Emit.ILGenerator.Emit(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitConvertArithmeticResult(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitShiftMask(), System.Reflection.Emit.OpCodes.Ldc_I4_0, System.Reflection.Emit.OpCodes.Mul, System.Reflection.Emit.OpCodes.Mul_Ovf, System.Reflection.Emit.OpCodes.Or, System.Reflection.Emit.OpCodes.Rem, System.Reflection.Emit.OpCodes.Shl, System.Reflection.Emit.OpCodes.Shr, System.Reflection.Emit.OpCodes.Shr_Un, System.Reflection.Emit.OpCodes.Sub, System.Reflection.Emit.OpCodes.Sub_Ovf, System.Reflection.Emit.OpCodes.Sub_Ovf_Un, and System.Reflection.Emit.OpCodes.Xor.

Referenced by System.Linq.Expressions.Compiler.LambdaCompiler.EmitBinaryOperator(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitLiftedRelational(), and System.Linq.Expressions.Compiler.LambdaCompiler.EmitLiftedToNullRelational().