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

◆ UpdateAndExecute1< T0, TRet >()

static TRet System.Dynamic.UpdateDelegates.UpdateAndExecute1< T0, TRet > ( CallSite site,
T0 arg0 )
inlinestaticpackage

Definition at line 8 of file UpdateDelegates.cs.

9 {
11 Func<CallSite, T0, TRet> target = callSite.Target;
12 site = callSite.GetMatchmaker();
13 Func<CallSite, T0, TRet>[] rules;
14 Func<CallSite, T0, TRet> func;
15 if ((rules = CallSiteOps.GetRules(callSite)) != null)
16 {
17 for (int i = 0; i < rules.Length; i++)
18 {
19 func = rules[i];
20 if ((object)func != target)
21 {
22 callSite.Target = func;
23 TRet result = func(site, arg0);
24 if (CallSiteOps.GetMatch(site))
25 {
26 CallSiteOps.UpdateRules(callSite, i);
27 callSite.ReleaseMatchmaker(site);
28 return result;
29 }
31 }
32 }
33 }
34 RuleCache<Func<CallSite, T0, TRet>> ruleCache = CallSiteOps.GetRuleCache(callSite);
35 rules = ruleCache.GetRules();
36 for (int j = 0; j < rules.Length; j++)
37 {
38 func = (callSite.Target = rules[j]);
39 try
40 {
41 TRet result = func(site, arg0);
42 if (CallSiteOps.GetMatch(site))
43 {
44 callSite.ReleaseMatchmaker(site);
45 return result;
46 }
47 }
48 finally
49 {
50 if (CallSiteOps.GetMatch(site))
51 {
52 CallSiteOps.AddRule(callSite, func);
53 CallSiteOps.MoveRule(ruleCache, func, j);
54 }
55 }
57 }
58 func = null;
59 object[] args = new object[1] { arg0 };
60 while (true)
61 {
62 callSite.Target = target;
63 func = (callSite.Target = callSite.Binder.BindCore(callSite, args));
64 try
65 {
66 TRet result = func(site, arg0);
67 if (CallSiteOps.GetMatch(site))
68 {
69 callSite.ReleaseMatchmaker(site);
70 return result;
71 }
72 }
73 finally
74 {
75 if (CallSiteOps.GetMatch(site))
76 {
77 CallSiteOps.AddRule(callSite, func);
78 }
79 }
81 }
82 }
static bool GetMatch(CallSite site)
static void ClearMatch(CallSite site)
void ReleaseMatchmaker(CallSite matchMaker)
Definition CallSite.cs:106

References 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.