513 {
514 CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, TRet>> callSite = (
CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, T6, TRet>>)site;
515 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, TRet> target = callSite.
Target;
517 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, TRet>[] rules;
518 Func<CallSite, T0, T1, T2, T3, T4, T5, T6, TRet>
func;
519 if ((rules =
CallSiteOps.GetRules(callSite)) !=
null)
520 {
521 for (
int i = 0;
i < rules.Length;
i++)
522 {
524 if ((
object)
func != target)
525 {
526 callSite.Target =
func;
527 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6);
529 {
532 return result;
533 }
535 }
536 }
537 }
540 for (int j = 0; j < rules.Length; j++)
541 {
542 func = (callSite.Target = rules[j]);
543 try
544 {
545 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6);
547 {
549 return result;
550 }
551 }
552 finally
553 {
555 {
558 }
559 }
561 }
563 object[] args = new object[7] { arg0, arg1, arg2, arg3, arg4, arg5, arg6 };
564 while (true)
565 {
566 callSite.Target = target;
567 func = (callSite.Target = callSite.
Binder.BindCore(callSite, args));
568 try
569 {
570 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6);
572 {
574 return result;
575 }
576 }
577 finally
578 {
580 {
582 }
583 }
585 }
586 }
static bool GetMatch(CallSite site)
static void ClearMatch(CallSite site)
void ReleaseMatchmaker(CallSite matchMaker)