Exemple #1
0
        // R(1, *)
        public override object InvokeSplat(BlockParam /*!*/ param, object self, object arg1, object splattee)
        {
            var list = splattee as List <object>;

            if (list == null)
            {
                if (!HasSingleCompoundParameter)
                {
                    param.MultipleValuesForBlockParameterWarning(2);
                }

                arg1 = RubyOps.MakeArray2(arg1, splattee);
            }
            else if (list.Count > 0)
            {
                var array = RubyOps.MakeArray1(arg1);
                array.AddRange(list);
                arg1 = array;

                if (!HasSingleCompoundParameter)
                {
                    param.MultipleValuesForBlockParameterWarning(array.Count);
                }
            }

            return(_block(param, self, arg1));
        }
Exemple #2
0
        // R(0, *)
        public override object InvokeSplat(BlockParam /*!*/ param, object self, IList /*!*/ splattee)
        {
            object item;

            switch (splattee.Count)
            {
            case 0:
                if (!HasSingleCompoundParameter)
                {
                    param.MultipleValuesForBlockParameterWarning(splattee.Count);
                }
                item = null;
                break;

            case 1:
                item = splattee[0];
                break;

            default:
                if (!HasSingleCompoundParameter)
                {
                    param.MultipleValuesForBlockParameterWarning(splattee.Count);
                }
                item = new RubyArray(splattee);
                break;
            }

            return(_block(param, self, item));
        }
Exemple #3
0
        // R(0, *)
        public override object InvokeSplat(BlockParam /*!*/ param, object self, object splattee)
        {
            var list = splattee as List <object>;

            if (list != null)
            {
                switch (list.Count)
                {
                case 0:
                    if (!HasSingleCompoundParameter)
                    {
                        param.MultipleValuesForBlockParameterWarning(list.Count);
                    }
                    splattee = null;
                    break;

                case 1:
                    splattee = list[0];
                    break;

                default:
                    if (!HasSingleCompoundParameter)
                    {
                        param.MultipleValuesForBlockParameterWarning(list.Count);
                    }
                    splattee = new RubyArray(list);
                    break;
                }
            }

            return(_block(param, self, splattee));
        }
Exemple #4
0
        // R(4, -)
        public override object Invoke(BlockParam /*!*/ param, object self, object arg1, object arg2, object arg3, object arg4)
        {
            if (!HasSingleCompoundParameter)
            {
                param.MultipleValuesForBlockParameterWarning(4);
            }

            return(_block(param, self, RubyOps.MakeArray4(arg1, arg2, arg3, arg4)));
        }
Exemple #5
0
        // R(0, -)
        public override object Invoke(BlockParam /*!*/ param, object self)
        {
            if (!HasSingleCompoundParameter)
            {
                param.MultipleValuesForBlockParameterWarning(0);
            }

            return(_block(param, self, null));
        }
Exemple #6
0
        // R(N, -)
        public override object Invoke(BlockParam /*!*/ param, object self, object[] /*!*/ args)
        {
            Debug.Assert(args.Length > MaxBlockArity);

            if (!HasSingleCompoundParameter)
            {
                param.MultipleValuesForBlockParameterWarning(args.Length);
            }

            return(_block(param, self, RubyOps.MakeArrayN(args)));
        }
Exemple #7
0
        private object InvokeSplatInternal(BlockParam /*!*/ param, object self, RubyArray /*!*/ array, object splattee)
        {
            Debug.Assert(array.Count >= 2);

            RubyOps.SplatAppend(array, splattee);

            if (!HasSingleCompoundParameter)
            {
                param.MultipleValuesForBlockParameterWarning(array.Count);
            }

            return(_block(param, self, array));
        }
Exemple #8
0
        // R(1, *)
        public override object InvokeSplat(BlockParam /*!*/ param, object self, object arg1, IList /*!*/ splattee)
        {
            if (splattee.Count > 0)
            {
                var array = new RubyArray(1 + splattee.Count);
                array.Add(arg1);
                array.AddRange(splattee);
                arg1 = array;

                if (!HasSingleCompoundParameter)
                {
                    param.MultipleValuesForBlockParameterWarning(array.Count);
                }
            }

            return(_block(param, self, arg1));
        }
Exemple #9
0
        // R(N, *, =)
        public override object InvokeSplatRhs(BlockParam /*!*/ param, object self, object[] /*!*/ args, object splattee, object rhs)
        {
            var array = new RubyArray(args);

            RubyOps.SplatAppend(array, splattee);
            array.Add(rhs);

            if (array.Count == 1)
            {
                return(_block(param, self, rhs));
            }

            Debug.Assert(array.Count >= 2);

            if (!HasSingleCompoundParameter)
            {
                param.MultipleValuesForBlockParameterWarning(array.Count);
            }

            return(_block(param, self, array));
        }
Exemple #10
0
        // R(N, *, =)
        public override object InvokeSplatRhs(BlockParam/*!*/ param, object self, object[]/*!*/ args, object splattee, object rhs) {
            var array = new RubyArray(args);
            RubyOps.SplatAppend(array, splattee);
            array.Add(rhs);

            if (array.Count == 1) {
                return _block(param, self, rhs);
            }

            Debug.Assert(array.Count >= 2);

            if (!HasSingleCompoundParameter) {
                param.MultipleValuesForBlockParameterWarning(array.Count);
            }
            
            return _block(param, self, array);
        }
Exemple #11
0
        private object InvokeSplatInternal(BlockParam/*!*/ param, object self, RubyArray/*!*/ array, object splattee) {
            Debug.Assert(array.Count >= 2);

            RubyOps.SplatAppend(array, splattee);

            if (!HasSingleCompoundParameter) {
                param.MultipleValuesForBlockParameterWarning(array.Count);
            }

            return _block(param, self, array);
        }
Exemple #12
0
        // R(1, *)
        public override object InvokeSplat(BlockParam/*!*/ param, object self, object arg1, object splattee) {
            var list = splattee as IList;
            if (list == null) {
                if (!HasSingleCompoundParameter) {
                    param.MultipleValuesForBlockParameterWarning(2);
                }

                arg1 = RubyOps.MakeArray2(arg1, splattee);
            } else if (list.Count > 0) {
                var array = RubyOps.MakeArray1(arg1);
                array.AddRange(list);
                arg1 = array;

                if (!HasSingleCompoundParameter) {
                    param.MultipleValuesForBlockParameterWarning(array.Count);
                }
            }

            return _block(param, self, arg1);
        }
Exemple #13
0
        // R(0, *)
        public override object InvokeSplat(BlockParam/*!*/ param, object self, object splattee) {
            var list = splattee as IList;
            if (list != null) {
                switch (list.Count) {
                    case 0:
                        if (!HasSingleCompoundParameter) {
                            param.MultipleValuesForBlockParameterWarning(list.Count);
                        }
                        splattee = null; 
                        break;

                    case 1: 
                        splattee = list[0]; 
                        break;

                    default:
                        if (!HasSingleCompoundParameter) {
                            param.MultipleValuesForBlockParameterWarning(list.Count);
                        }
                        splattee = new RubyArray(list);
                        break;
                }
            }

            return _block(param, self, splattee);
        }
Exemple #14
0
        // R(N, -)
        public override object Invoke(BlockParam/*!*/ param, object self, object[]/*!*/ args) {
            Debug.Assert(args.Length > MaxBlockArity);

            if (!HasSingleCompoundParameter) {
                param.MultipleValuesForBlockParameterWarning(args.Length);
            }

            return _block(param, self, RubyOps.MakeArrayN(args));
        }
Exemple #15
0
        // R(4, -)
        public override object Invoke(BlockParam/*!*/ param, object self, object arg1, object arg2, object arg3, object arg4) {
            if (!HasSingleCompoundParameter) {
                param.MultipleValuesForBlockParameterWarning(4);
            }

            return _block(param, self, RubyOps.MakeArray4(arg1, arg2, arg3, arg4));
        }
Exemple #16
0
 // R(0, -)
 public override object Invoke(BlockParam/*!*/ param, object self) {
     if (!HasSingleCompoundParameter) {
         param.MultipleValuesForBlockParameterWarning(0);
     }
     
     return _block(param, self, null);
 }