Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ UpdateAndExecuteVoid8< T0, T1, T2, T3, T4, T5, T6, T7 >()

static void System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid8< T0, T1, T2, T3, T4, T5, T6, T7 > ( CallSite site,
T0 arg0,
T1 arg1,
T2 arg2,
T3 arg3,
T4 arg4,
T5 arg5,
T6 arg6,
T7 arg7 )
inlinestaticpackage

Definition at line 1429 of file UpdateDelegates.cs.

1430 {
1432 Action<CallSite, T0, T1, T2, T3, T4, T5, T6, T7> target = callSite.Target;
1433 site = callSite.GetMatchmaker();
1434 Action<CallSite, T0, T1, T2, T3, T4, T5, T6, T7>[] rules;
1435 Action<CallSite, T0, T1, T2, T3, T4, T5, T6, T7> action;
1436 if ((rules = CallSiteOps.GetRules(callSite)) != null)
1437 {
1438 for (int i = 0; i < rules.Length; i++)
1439 {
1440 action = rules[i];
1441 if ((object)action != target)
1442 {
1443 callSite.Target = action;
1444 action(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
1445 if (CallSiteOps.GetMatch(site))
1446 {
1447 CallSiteOps.UpdateRules(callSite, i);
1448 callSite.ReleaseMatchmaker(site);
1449 return;
1450 }
1451 CallSiteOps.ClearMatch(site);
1452 }
1453 }
1454 }
1456 rules = ruleCache.GetRules();
1457 for (int j = 0; j < rules.Length; j++)
1458 {
1459 action = (callSite.Target = rules[j]);
1460 try
1461 {
1462 action(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
1463 if (CallSiteOps.GetMatch(site))
1464 {
1465 callSite.ReleaseMatchmaker(site);
1466 return;
1467 }
1468 }
1469 finally
1470 {
1471 if (CallSiteOps.GetMatch(site))
1472 {
1473 CallSiteOps.AddRule(callSite, action);
1474 CallSiteOps.MoveRule(ruleCache, action, j);
1475 }
1476 }
1477 CallSiteOps.ClearMatch(site);
1478 }
1479 action = null;
1480 object[] args = new object[8] { arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 };
1481 while (true)
1482 {
1483 callSite.Target = target;
1484 action = (callSite.Target = callSite.Binder.BindCore(callSite, args));
1485 try
1486 {
1487 action(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
1488 if (CallSiteOps.GetMatch(site))
1489 {
1490 callSite.ReleaseMatchmaker(site);
1491 break;
1492 }
1493 }
1494 finally
1495 {
1496 if (CallSiteOps.GetMatch(site))
1497 {
1498 CallSiteOps.AddRule(callSite, action);
1499 }
1500 }
1501 CallSiteOps.ClearMatch(site);
1502 }
1503 }
static bool GetMatch(CallSite site)
static void ClearMatch(CallSite site)
void ReleaseMatchmaker(CallSite matchMaker)
Definition CallSite.cs:106

References System.action, System.Runtime.CompilerServices.CallSite< T >.Binder, System.Runtime.CompilerServices.CallSiteOps.ClearMatch(), System.Runtime.CompilerServices.CallSiteOps.GetMatch(), System.Runtime.CompilerServices.CallSite< T >.GetMatchmaker(), System.Runtime.CompilerServices.RuleCache< T >.GetRules(), System.Runtime.CompilerServices.CallSite< T >.ReleaseMatchmaker(), and System.Runtime.CompilerServices.CallSite< T >.Target.