681 {
682 CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, TRet>> callSite = (
CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, TRet>>)site;
683 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, TRet> target = callSite.
Target;
685 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, TRet>[] rules;
686 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, TRet>
func;
687 if ((rules =
CallSiteOps.GetRules(callSite)) !=
null)
688 {
689 for (
int i = 0;
i < rules.Length;
i++)
690 {
692 if ((
object)
func != target)
693 {
694 callSite.Target =
func;
695 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
697 {
700 return result;
701 }
703 }
704 }
705 }
706 RuleCache<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, TRet>> ruleCache =
CallSiteOps.GetRuleCache(callSite);
708 for (int j = 0; j < rules.Length; j++)
709 {
710 func = (callSite.Target = rules[j]);
711 try
712 {
713 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
715 {
717 return result;
718 }
719 }
720 finally
721 {
723 {
726 }
727 }
729 }
731 object[] args = new object[9] { arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 };
732 while (true)
733 {
734 callSite.Target = target;
735 func = (callSite.Target = callSite.
Binder.BindCore(callSite, args));
736 try
737 {
738 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
740 {
742 return result;
743 }
744 }
745 finally
746 {
748 {
750 }
751 }
753 }
754 }
static bool GetMatch(CallSite site)
static void ClearMatch(CallSite site)
void ReleaseMatchmaker(CallSite matchMaker)