345 {
346 CallSite<Func<CallSite, T0, T1, T2, T3, T4, TRet>> callSite = (
CallSite<Func<CallSite, T0, T1, T2, T3, T4, TRet>>)site;
347 Func<CallSite, T0, T1, T2, T3, T4, TRet> target = callSite.
Target;
349 Func<CallSite, T0, T1, T2, T3, T4, TRet>[] rules;
350 Func<CallSite, T0, T1, T2, T3, T4, TRet>
func;
351 if ((rules =
CallSiteOps.GetRules(callSite)) !=
null)
352 {
353 for (
int i = 0;
i < rules.Length;
i++)
354 {
356 if ((
object)
func != target)
357 {
358 callSite.Target =
func;
359 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4);
361 {
364 return result;
365 }
367 }
368 }
369 }
372 for (int j = 0; j < rules.Length; j++)
373 {
374 func = (callSite.Target = rules[j]);
375 try
376 {
377 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4);
379 {
381 return result;
382 }
383 }
384 finally
385 {
387 {
390 }
391 }
393 }
395 object[] args = new object[5] { arg0, arg1, arg2, arg3, arg4 };
396 while (true)
397 {
398 callSite.Target = target;
399 func = (callSite.Target = callSite.
Binder.BindCore(callSite, args));
400 try
401 {
402 TRet result =
func(site, arg0, arg1, arg2, arg3, arg4);
404 {
406 return result;
407 }
408 }
409 finally
410 {
412 {
414 }
415 }
417 }
418 }
static bool GetMatch(CallSite site)
static void ClearMatch(CallSite site)
void ReleaseMatchmaker(CallSite matchMaker)