429 {
430 CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, TRet>> callSite = (
CallSite<Func<CallSite, T0, T1, T2, T3, T4, T5, TRet>>)site;
431 Func<CallSite, T0, T1, T2, T3, T4, T5, TRet> target = callSite.
Target;
433 Func<CallSite, T0, T1, T2, T3, T4, T5, TRet>[] rules;
434 Func<CallSite, T0, T1, T2, T3, T4, T5, TRet>
func;
435 if ((rules =
CallSiteOps.GetRules(callSite)) !=
null)
436 {
437 for (
int i = 0;
i < rules.Length;
i++)
438 {
440 if ((
object)
func != target)
441 {
442 callSite.Target =
func;
443 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5);
445 {
448 return result;
449 }
451 }
452 }
453 }
456 for (int j = 0; j < rules.Length; j++)
457 {
458 func = (callSite.Target = rules[j]);
459 try
460 {
461 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5);
463 {
465 return result;
466 }
467 }
468 finally
469 {
471 {
474 }
475 }
477 }
479 object[] args = new object[6] { arg0, arg1, arg2, arg3, arg4, arg5 };
480 while (true)
481 {
482 callSite.Target = target;
483 func = (callSite.Target = callSite.
Binder.BindCore(callSite, args));
484 try
485 {
486 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4, arg5);
488 {
490 return result;
491 }
492 }
493 finally
494 {
496 {
498 }
499 }
501 }
502 }
static bool GetMatch(CallSite site)
static void ClearMatch(CallSite site)
void ReleaseMatchmaker(CallSite matchMaker)