765 {
766 CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, TRet>> callSite = (
CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, TRet>>)site;
767 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, TRet> target = callSite.
Target;
769 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, TRet>[] rules;
770 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, TRet>
func;
771 if ((rules =
CallSiteOps.GetRules(callSite)) !=
null)
772 {
773 for (
int i = 0;
i < rules.Length;
i++)
774 {
776 if ((
object)
func != target)
777 {
778 callSite.Target =
func;
779 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
781 {
784 return result;
785 }
787 }
788 }
789 }
790 RuleCache<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, TRet>> ruleCache =
CallSiteOps.GetRuleCache(callSite);
792 for (int j = 0; j < rules.Length; j++)
793 {
794 func = (callSite.Target = rules[j]);
795 try
796 {
797 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
799 {
801 return result;
802 }
803 }
804 finally
805 {
807 {
810 }
811 }
813 }
815 object[] args = new object[10] { arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 };
816 while (true)
817 {
818 callSite.Target = target;
819 func = (callSite.Target = callSite.
Binder.BindCore(callSite, args));
820 try
821 {
822 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
824 {
826 return result;
827 }
828 }
829 finally
830 {
832 {
834 }
835 }
837 }
838 }
static bool GetMatch(CallSite site)
static void ClearMatch(CallSite site)
void ReleaseMatchmaker(CallSite matchMaker)