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

◆ UpdateAndExecuteVoid2< T0, T1 >()

static void System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2< T0, T1 > ( CallSite site,
T0 arg0,
T1 arg1 )
inlinestaticpackage

Definition at line 931 of file UpdateDelegates.cs.

932 {
934 Action<CallSite, T0, T1> target = callSite.Target;
935 site = callSite.GetMatchmaker();
936 Action<CallSite, T0, T1>[] rules;
937 Action<CallSite, T0, T1> action;
938 if ((rules = CallSiteOps.GetRules(callSite)) != null)
939 {
940 for (int i = 0; i < rules.Length; i++)
941 {
942 action = rules[i];
943 if ((object)action != target)
944 {
945 callSite.Target = action;
946 action(site, arg0, arg1);
947 if (CallSiteOps.GetMatch(site))
948 {
949 CallSiteOps.UpdateRules(callSite, i);
950 callSite.ReleaseMatchmaker(site);
951 return;
952 }
954 }
955 }
956 }
957 RuleCache<Action<CallSite, T0, T1>> ruleCache = CallSiteOps.GetRuleCache(callSite);
958 rules = ruleCache.GetRules();
959 for (int j = 0; j < rules.Length; j++)
960 {
961 action = (callSite.Target = rules[j]);
962 try
963 {
964 action(site, arg0, arg1);
965 if (CallSiteOps.GetMatch(site))
966 {
967 callSite.ReleaseMatchmaker(site);
968 return;
969 }
970 }
971 finally
972 {
973 if (CallSiteOps.GetMatch(site))
974 {
975 CallSiteOps.AddRule(callSite, action);
976 CallSiteOps.MoveRule(ruleCache, action, j);
977 }
978 }
980 }
981 action = null;
982 object[] args = new object[2] { arg0, arg1 };
983 while (true)
984 {
985 callSite.Target = target;
986 action = (callSite.Target = callSite.Binder.BindCore(callSite, args));
987 try
988 {
989 action(site, arg0, arg1);
990 if (CallSiteOps.GetMatch(site))
991 {
992 callSite.ReleaseMatchmaker(site);
993 break;
994 }
995 }
996 finally
997 {
998 if (CallSiteOps.GetMatch(site))
999 {
1000 CallSiteOps.AddRule(callSite, action);
1001 }
1002 }
1003 CallSiteOps.ClearMatch(site);
1004 }
1005 }
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.