예제 #1
0
파일: Number.cs 프로젝트: gavin-zyi/Rin
        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);
        }
예제 #2
0
파일: Module.cs 프로젝트: gavin-zyi/Rin
        internal override bool GetMemberOperation(GetMemberBinder binder, out Any result)
        {
            if (Members.TryGetValue(binder.Name, out result))
            {
                return true;
            }

            return base.GetMemberOperation(binder, out result);
        }
예제 #3
0
파일: String.cs 프로젝트: gavin-zyi/Rin
        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);
        }
예제 #4
0
파일: Iter.cs 프로젝트: gavin-zyi/Rin
        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;
        }
예제 #5
0
파일: Number.cs 프로젝트: gavin-zyi/Rin
        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);
        }
예제 #6
0
파일: String.cs 프로젝트: gavin-zyi/Rin
        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);
        }
예제 #7
0
파일: Function.cs 프로젝트: gavin-zyi/Rin
 internal override bool InvokeOperation(InvokeBinder binder, Args args, out Any result)
 {
     result = signature(args);
     return(true);
 }
예제 #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);
        }
예제 #9
0
파일: Class.cs 프로젝트: gavin-zyi/Rin
 internal override bool SetMemberOperation(SetMemberBinder binder, Any value)
 {
     members[binder.Name] = value;
     return true;
 }
예제 #10
0
파일: Class.cs 프로젝트: gavin-zyi/Rin
 internal override bool InvokeOperation(InvokeBinder binder, Args args, out Any result)
 {
     result = ctor(args);
     return true;
 }
예제 #11
0
파일: Number.cs 프로젝트: gavin-zyi/Rin
        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));
        }
예제 #12
0
파일: Any.cs 프로젝트: gavin-zyi/Rin
 internal virtual bool GetIndexOperation(GetIndexBinder binder, Args indices, out Any result)
 {
     result = null;
     return false;
 }
예제 #13
0
파일: Tuple.cs 프로젝트: gavin-zyi/Rin
 internal override bool GetIndexOperation(GetIndexBinder binder, Args indices, out Any result)
 {
     var idx = (int)((Number)indices[0]).Value;
     result = values[idx];
     return true;
 }
예제 #14
0
파일: Module.cs 프로젝트: gavin-zyi/Rin
 internal override bool SetMemberOperation(SetMemberBinder binder, Any value)
 {
     Members[binder.Name] = value;
     return(true);
 }
예제 #15
0
파일: Any.cs 프로젝트: gavin-zyi/Rin
 internal virtual bool UnaryOperation(UnaryOperationBinder binder, out Any result)
 {
     result = null;
     return false;
 }
예제 #16
0
파일: Any.cs 프로젝트: gavin-zyi/Rin
 internal virtual bool SetMemberOperation(SetMemberBinder binder, Any value)
 {
     return false;
 }
예제 #17
0
파일: Any.cs 프로젝트: gavin-zyi/Rin
 internal virtual bool SetIndexOperation(SetIndexBinder binder, Args indices, Any value)
 {
     return false;
 }
예제 #18
0
파일: Any.cs 프로젝트: gavin-zyi/Rin
 internal virtual bool InvokeOperation(InvokeBinder binder, Args args, out Any result)
 {
     result = null;
     return false;
 }
예제 #19
0
파일: Any.cs 프로젝트: gavin-zyi/Rin
 internal virtual bool GetMemberOperation(GetMemberBinder binder, out Any result)
 {
     result = null;
     return false;
 }