Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
BinaryOperationBinder.cs
Go to the documentation of this file.
3
4namespace System.Dynamic;
5
7{
8 public sealed override Type ReturnType => typeof(object);
9
10 public ExpressionType Operation { get; }
11
12 internal sealed override bool IsStandardBinder => true;
13
15 {
16 ContractUtils.Requires(OperationIsValid(operation), "operation");
17 Operation = operation;
18 }
19
24
26
27 public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args)
28 {
29 ContractUtils.RequiresNotNull(target, "target");
30 ContractUtils.RequiresNotNull(args, "args");
31 ContractUtils.Requires(args.Length == 1, "args");
32 DynamicMetaObject dynamicMetaObject = args[0];
33 ContractUtils.RequiresNotNull(dynamicMetaObject, "args");
34 return target.BindBinaryOperation(this, dynamicMetaObject);
35 }
36
37 internal static bool OperationIsValid(ExpressionType operation)
38 {
39 switch (operation)
40 {
41 case ExpressionType.Add:
42 case ExpressionType.And:
43 case ExpressionType.Divide:
44 case ExpressionType.Equal:
45 case ExpressionType.ExclusiveOr:
46 case ExpressionType.GreaterThan:
47 case ExpressionType.GreaterThanOrEqual:
48 case ExpressionType.LeftShift:
49 case ExpressionType.LessThan:
50 case ExpressionType.LessThanOrEqual:
51 case ExpressionType.Modulo:
52 case ExpressionType.Multiply:
53 case ExpressionType.NotEqual:
54 case ExpressionType.Or:
55 case ExpressionType.Power:
56 case ExpressionType.RightShift:
57 case ExpressionType.Subtract:
58 case ExpressionType.Extension:
59 case ExpressionType.AddAssign:
60 case ExpressionType.AndAssign:
61 case ExpressionType.DivideAssign:
62 case ExpressionType.ExclusiveOrAssign:
63 case ExpressionType.LeftShiftAssign:
64 case ExpressionType.ModuloAssign:
65 case ExpressionType.MultiplyAssign:
66 case ExpressionType.OrAssign:
67 case ExpressionType.PowerAssign:
68 case ExpressionType.RightShiftAssign:
69 case ExpressionType.SubtractAssign:
70 return true;
71 default:
72 return false;
73 }
74 }
75}
BinaryOperationBinder(ExpressionType operation)
DynamicMetaObject FallbackBinaryOperation(DynamicMetaObject target, DynamicMetaObject arg)
override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args)
DynamicMetaObject FallbackBinaryOperation(DynamicMetaObject target, DynamicMetaObject arg, DynamicMetaObject? errorSuggestion)
static bool OperationIsValid(ExpressionType operation)
virtual DynamicMetaObject BindBinaryOperation(BinaryOperationBinder binder, DynamicMetaObject arg)
static void Requires([DoesNotReturnIf(false)] bool precondition, string paramName)
static void RequiresNotNull(object value, string paramName)