public override bool Equals(object obj) { OldDoOperationAction other = obj as OldDoOperationAction; if (other == null) { return(false); } return(_operation == other._operation && (object)_binder == (object)other._binder); }
private MethodInfo[] GetApplicableMembers(Type t, OperatorInfo info) { Assert.NotNull(t, info); OldDoOperationAction act = OldDoOperationAction.Make(this, info.Operator); MemberGroup members = GetMember(act, t, info.Name); if (members.Count == 0 && info.AlternateName != null) { members = GetMember(act, t, info.AlternateName); } // filter down to just methods return(FilterNonMethods(t, members)); }
private MetaObject TryNumericComparison(OperatorInfo info, MetaObject[] args) { MethodInfo[] targets = FilterNonMethods( args[0].LimitType, GetMember(OldDoOperationAction.Make(this, info.Operator), args[0].LimitType, "Compare") ); if (targets.Length > 0) { MethodBinder mb = MethodBinder.MakeBinder(this, targets[0].Name, targets); BindingTarget target = mb.MakeBindingTarget(CallTypes.None, args); if (target.Success) { Expression call = AstUtils.Convert(target.MakeExpression(), typeof(int)); switch (info.Operator) { case Operators.GreaterThan: call = Ast.GreaterThan(call, Ast.Constant(0)); break; case Operators.LessThan: call = Ast.LessThan(call, Ast.Constant(0)); break; case Operators.GreaterThanOrEqual: call = Ast.GreaterThanOrEqual(call, Ast.Constant(0)); break; case Operators.LessThanOrEqual: call = Ast.LessThanOrEqual(call, Ast.Constant(0)); break; case Operators.Equals: call = Ast.Equal(call, Ast.Constant(0)); break; case Operators.NotEquals: call = Ast.NotEqual(call, Ast.Constant(0)); break; case Operators.Compare: break; } return(new MetaObject( call, Restrictions.Combine(target.RestrictedArguments) )); } } return(null); }