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

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

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

Definition at line 1512 of file UpdateDelegates.cs.

1513 {
1515 Action<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8> target = callSite.Target;
1516 site = callSite.GetMatchmaker();
1517 Action<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8>[] rules;
1518 Action<CallSite, T0, T1, T2, T3, T4, T5, T6, T7, T8> action;
1519 if ((rules = CallSiteOps.GetRules(callSite)) != null)
1520 {
1521 for (int i = 0; i < rules.Length; i++)
1522 {
1523 action = rules[i];
1524 if ((object)action != target)
1525 {
1526 callSite.Target = action;
1527 action(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
1528 if (CallSiteOps.GetMatch(site))
1529 {
1530 CallSiteOps.UpdateRules(callSite, i);
1531 callSite.ReleaseMatchmaker(site);
1532 return;
1533 }
1534 CallSiteOps.ClearMatch(site);
1535 }
1536 }
1537 }
1539 rules = ruleCache.GetRules();
1540 for (int j = 0; j < rules.Length; j++)
1541 {
1542 action = (callSite.Target = rules[j]);
1543 try
1544 {
1545 action(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
1546 if (CallSiteOps.GetMatch(site))
1547 {
1548 callSite.ReleaseMatchmaker(site);
1549 return;
1550 }
1551 }
1552 finally
1553 {
1554 if (CallSiteOps.GetMatch(site))
1555 {
1556 CallSiteOps.AddRule(callSite, action);
1557 CallSiteOps.MoveRule(ruleCache, action, j);
1558 }
1559 }
1560 CallSiteOps.ClearMatch(site);
1561 }
1562 action = null;
1563 object[] args = new object[9] { arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 };
1564 while (true)
1565 {
1566 callSite.Target = target;
1567 action = (callSite.Target = callSite.Binder.BindCore(callSite, args));
1568 try
1569 {
1570 action(site, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
1571 if (CallSiteOps.GetMatch(site))
1572 {
1573 callSite.ReleaseMatchmaker(site);
1574 break;
1575 }
1576 }
1577 finally
1578 {
1579 if (CallSiteOps.GetMatch(site))
1580 {
1581 CallSiteOps.AddRule(callSite, action);
1582 }
1583 }
1584 CallSiteOps.ClearMatch(site);
1585 }
1586 }
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.