Example #1
0
        internal override bool BinaryOperation(BinaryOperationBinder binder, Any arg, out Any result)
        {
            var number = arg as Number;
            if (number != null)
            {
                switch (binder.Operation)
                {
                    case ExpressionType.Add:
                        result = new Number(Value + number.Value);
                        break;
                    case ExpressionType.Subtract:
                        result = new Number(Value - number.Value);
                        break;
                    case ExpressionType.Multiply:
                        result = new Number(Value * number.Value);
                        break;
                    case ExpressionType.Divide:
                        result = new Number(Value / number.Value);
                        break;
                    case ExpressionType.LessThan:
                        result = Value < number.Value ? Bool.True : Bool.False;
                        break;
                    case ExpressionType.LessThanOrEqual:
                        result = Value <= number.Value ? Bool.True : Bool.False;
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }

                return true;
            }

            return base.BinaryOperation(binder, arg, out result);
        }
Example #2
0
        internal override bool GetMemberOperation(GetMemberBinder binder, out Any result)
        {
            if (Members.TryGetValue(binder.Name, out result))
            {
                return true;
            }

            return base.GetMemberOperation(binder, out result);
        }
Example #3
0
        internal override bool UnaryOperation(UnaryOperationBinder binder, out Any result)
        {
            switch (binder.Operation)
            {
                case ExpressionType.IsTrue:
                    result = Value.Length > 0 ? Bool.True : Bool.False;
                    return true;
            }

            return base.UnaryOperation(binder, out result);
        }
Example #4
0
        internal override bool GetMemberOperation(GetMemberBinder binder, out Any result)
        {
            Func<Iter, Any> member;

            if (!members.TryGetValue(binder.Name, out member))
            {
                result = null;
                return false;
            }

            result = member(this);

            return true;
        }
Example #5
0
        internal override bool UnaryOperation(UnaryOperationBinder binder, out Any result)
        {
            switch (binder.Operation)
            {
                case ExpressionType.IsTrue:
                    result = ((int)Value) != 0 ? Bool.True : Bool.False;
                    return true;
                case ExpressionType.Negate:
                    result = new Number(-Value);
                    return true;
            }

            return base.UnaryOperation(binder, out result);
        }
Example #6
0
        internal override bool BinaryOperation(BinaryOperationBinder binder, Any arg, out Any result)
        {
            var str = arg as String;
            if (str != null)
            {
                switch (binder.Operation)
                {
                    case ExpressionType.Add:
                        result = new String(Value + str.Value);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                }

                return true;
            }

            return base.BinaryOperation(binder, arg, out result);
        }
Example #7
0
 internal override bool InvokeOperation(InvokeBinder binder, Args args, out Any result)
 {
     result = signature(args);
     return(true);
 }
Example #8
0
        internal override bool GetIndexOperation(GetIndexBinder binder, Args indices, out Any result)
        {
            var idx = (int)((Number)indices[0]).Value;

            result = values[idx];
            return(true);
        }
Example #9
0
 internal override bool SetMemberOperation(SetMemberBinder binder, Any value)
 {
     members[binder.Name] = value;
     return true;
 }
Example #10
0
 internal override bool InvokeOperation(InvokeBinder binder, Args args, out Any result)
 {
     result = ctor(args);
     return true;
 }
Example #11
0
        internal override bool BinaryOperation(BinaryOperationBinder binder, Any arg, out Any result)
        {
            var number = arg as Number;

            if (number != null)
            {
                switch (binder.Operation)
                {
                case ExpressionType.Add:
                    result = new Number(Value + number.Value);
                    break;

                case ExpressionType.Subtract:
                    result = new Number(Value - number.Value);
                    break;

                case ExpressionType.Multiply:
                    result = new Number(Value * number.Value);
                    break;

                case ExpressionType.Divide:
                    result = new Number(Value / number.Value);
                    break;

                case ExpressionType.LessThan:
                    result = Value < number.Value ? Bool.True : Bool.False;
                    break;

                case ExpressionType.LessThanOrEqual:
                    result = Value <= number.Value ? Bool.True : Bool.False;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                return(true);
            }

            return(base.BinaryOperation(binder, arg, out result));
        }
Example #12
0
File: Any.cs Project: gavin-zyi/Rin
 internal virtual bool GetIndexOperation(GetIndexBinder binder, Args indices, out Any result)
 {
     result = null;
     return false;
 }
Example #13
0
 internal override bool GetIndexOperation(GetIndexBinder binder, Args indices, out Any result)
 {
     var idx = (int)((Number)indices[0]).Value;
     result = values[idx];
     return true;
 }
Example #14
0
 internal override bool SetMemberOperation(SetMemberBinder binder, Any value)
 {
     Members[binder.Name] = value;
     return(true);
 }
Example #15
0
File: Any.cs Project: gavin-zyi/Rin
 internal virtual bool UnaryOperation(UnaryOperationBinder binder, out Any result)
 {
     result = null;
     return false;
 }
Example #16
0
File: Any.cs Project: gavin-zyi/Rin
 internal virtual bool SetMemberOperation(SetMemberBinder binder, Any value)
 {
     return false;
 }
Example #17
0
File: Any.cs Project: gavin-zyi/Rin
 internal virtual bool SetIndexOperation(SetIndexBinder binder, Args indices, Any value)
 {
     return false;
 }
Example #18
0
File: Any.cs Project: gavin-zyi/Rin
 internal virtual bool InvokeOperation(InvokeBinder binder, Args args, out Any result)
 {
     result = null;
     return false;
 }
Example #19
0
File: Any.cs Project: gavin-zyi/Rin
 internal virtual bool GetMemberOperation(GetMemberBinder binder, out Any result)
 {
     result = null;
     return false;
 }