597 {
598 CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, TRet>> callSite = (
CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, TRet>>)site;
599 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, TRet> target = callSite.
Target;
601 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, TRet>[] rules;
602 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, TRet>
func;
603 if ((rules =
CallSiteOps.GetRules(callSite)) !=
null)
604 {
605 for (
int i = 0;
i < rules.Length;
i++)
606 {
608 if ((
object)
func != target)
609 {
610 callSite.Target =
func;
611 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
613 {
616 return result;
617 }
619 }
620 }
621 }
624 for (int j = 0; j < rules.Length; j++)
625 {
626 func = (callSite.Target = rules[j]);
627 try
628 {
629 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
631 {
633 return result;
634 }
635 }
636 finally
637 {
639 {
642 }
643 }
645 }
647 object[] args = new object[8] { arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 };
648 while (true)
649 {
650 callSite.Target = target;
651 func = (callSite.Target = callSite.
Binder.BindCore(callSite, args));
652 try
653 {
654 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
656 {
658 return result;
659 }
660 }
661 finally
662 {
664 {
666 }
667 }
669 }
670 }
static bool GetMatch(CallSite site)
static void ClearMatch(CallSite site)
void ReleaseMatchmaker(CallSite matchMaker)