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

◆ UpdateAndExecuteVoid1< T0 >()

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

Definition at line 848 of file UpdateDelegates.cs.

849 {
851 Action<CallSite, T0> target = callSite.Target;
852 site = callSite.GetMatchmaker();
853 Action<CallSite, T0>[] rules;
854 Action<CallSite, T0> action;
855 if ((rules = CallSiteOps.GetRules(callSite)) != null)
856 {
857 for (int i = 0; i < rules.Length; i++)
858 {
859 action = rules[i];
860 if ((object)action != target)
861 {
862 callSite.Target = action;
863 action(site, arg0);
864 if (CallSiteOps.GetMatch(site))
865 {
866 CallSiteOps.UpdateRules(callSite, i);
867 callSite.ReleaseMatchmaker(site);
868 return;
869 }
871 }
872 }
873 }
874 RuleCache<Action<CallSite, T0>> ruleCache = CallSiteOps.GetRuleCache(callSite);
875 rules = ruleCache.GetRules();
876 for (int j = 0; j < rules.Length; j++)
877 {
878 action = (callSite.Target = rules[j]);
879 try
880 {
881 action(site, arg0);
882 if (CallSiteOps.GetMatch(site))
883 {
884 callSite.ReleaseMatchmaker(site);
885 return;
886 }
887 }
888 finally
889 {
890 if (CallSiteOps.GetMatch(site))
891 {
892 CallSiteOps.AddRule(callSite, action);
893 CallSiteOps.MoveRule(ruleCache, action, j);
894 }
895 }
897 }
898 action = null;
899 object[] args = new object[1] { arg0 };
900 while (true)
901 {
902 callSite.Target = target;
903 action = (callSite.Target = callSite.Binder.BindCore(callSite, args));
904 try
905 {
906 action(site, arg0);
907 if (CallSiteOps.GetMatch(site))
908 {
909 callSite.ReleaseMatchmaker(site);
910 break;
911 }
912 }
913 finally
914 {
915 if (CallSiteOps.GetMatch(site))
916 {
917 CallSiteOps.AddRule(callSite, action);
918 }
919 }
921 }
922 }
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.