Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
        }