예제 #1
0
        public void InvokeAction8 <A1, A2, A3, A4, A5, A6, A7, A8> (object o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
        {
            Stats.Increment(StatsCounter.InvokeMemberBinderInvoked);

            bool invokeOnly = false;

            if (mOverloadState != OverloadState.HasOverload)
            {
                invokeOnly = UpdateInvoker(o);
                ICallerA <A1, A2, A3, A4, A5, A6, A7, A8> caller = mInvoker as ICallerA <A1, A2, A3, A4, A5, A6, A7, A8>;
                if (caller != null)
                {
                    Stats.Increment(StatsCounter.InvokeMemberBinderInvoked_Fast);

                    caller.Call(a1, a2, a3, a4, a5, a6, a7, a8);                        // Fast path
                    return;
                }
            }

            var args = mArgs;

            args[0] = (object)a1;
            args[1] = (object)a2;
            args[2] = (object)a3;
            args[3] = (object)a4;
            args[4] = (object)a5;
            args[5] = (object)a6;
            args[6] = (object)a7;
            args[7] = (object)a8;
            ResolveAndInvoke(o, invokeOnly);
        }
예제 #2
0
        public void InvokeAction4 <A1, A2, A3, A4> (object o, A1 a1, A2 a2, A3 a3, A4 a4)
        {
            Stats.Increment(StatsCounter.InvokeMemberBinderInvoked);

            bool invokeOnly = false;

            if (mOverloadState != OverloadState.HasOverload)
            {
                invokeOnly = UpdateInvoker(o);
                ICallerA <A1, A2, A3, A4> caller = mInvoker as ICallerA <A1, A2, A3, A4>;
                if (caller != null)
                {
                    Stats.Increment(StatsCounter.InvokeMemberBinderInvoked_Fast);

                    caller.Call(a1, a2, a3, a4);                        // Fast path
                    return;
                }
            }

            var args = mArgs;

            args[0] = (object)a1;
            args[1] = (object)a2;
            args[2] = (object)a3;
            args[3] = (object)a4;
            ResolveAndInvoke(o, invokeOnly);
        }
예제 #3
0
        public void InvokeAction0(object o)
        {
            Stats.Increment(StatsCounter.InvokeMemberBinderInvoked);

            bool     invokeOnly = UpdateInvoker(o);
            ICallerA caller     = mInvoker as ICallerA;

            if (caller != null)
            {
                Stats.Increment(StatsCounter.InvokeMemberBinderInvoked_Fast);

                caller.Call();                          // Fast path
                return;
            }

            ResolveAndInvoke(o, invokeOnly);
        }
예제 #4
0
        public void InvokeAction1 <A1> (object o, A1 a1)
        {
            Stats.Increment(StatsCounter.InvokeMemberBinderInvoked);

            bool invokeOnly = false;

            if (mOverloadState != OverloadState.HasOverload)
            {
                invokeOnly = UpdateInvoker(o);
                ICallerA <A1> caller = mInvoker as ICallerA <A1>;
                if (caller != null)
                {
                    Stats.Increment(StatsCounter.InvokeMemberBinderInvoked_Fast);

                    caller.Call(a1);                            // Fast path
                    return;
                }
            }

            var args = mArgs;

            args[0] = (object)a1;
            ResolveAndInvoke(o, invokeOnly);
        }