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

◆ InvokeMember() [1/4]

override object System.RuntimeType.InvokeMember ( string name,
BindingFlags bindingFlags,
Binder binder,
object target,
object[] providedArgs,
ParameterModifier[] modifiers,
CultureInfo culture,
string[] namedParams )
inline

Definition at line 3695 of file RuntimeType.cs.

3696 {
3698 {
3699 throw new InvalidOperationException(SR.Arg_GenericParameter);
3700 }
3701 if ((bindingFlags & (BindingFlags.InvokeMethod | BindingFlags.CreateInstance | BindingFlags.GetField | BindingFlags.SetField | BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty)) == 0)
3702 {
3703 throw new ArgumentException(SR.Arg_NoAccessSpec, "bindingFlags");
3704 }
3705 if ((bindingFlags & (BindingFlags)255) == 0)
3706 {
3707 bindingFlags |= BindingFlags.Instance | BindingFlags.Public;
3708 if ((bindingFlags & BindingFlags.CreateInstance) == 0)
3709 {
3710 bindingFlags |= BindingFlags.Static;
3711 }
3712 }
3713 if (namedParams != null)
3714 {
3715 if (providedArgs != null)
3716 {
3717 if (namedParams.Length > providedArgs.Length)
3718 {
3719 throw new ArgumentException(SR.Arg_NamedParamTooBig, "namedParams");
3720 }
3721 }
3722 else if (namedParams.Length != 0)
3723 {
3724 throw new ArgumentException(SR.Arg_NamedParamTooBig, "namedParams");
3725 }
3726 }
3727 if (target != null && target.GetType().IsCOMObject)
3728 {
3729 if ((bindingFlags & (BindingFlags.InvokeMethod | BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty)) == 0)
3730 {
3731 throw new ArgumentException(SR.Arg_COMAccess, "bindingFlags");
3732 }
3733 if ((bindingFlags & BindingFlags.GetProperty) != 0 && ((uint)(bindingFlags & (BindingFlags.InvokeMethod | BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty)) & 0xFFFFEEFFu) != 0)
3734 {
3735 throw new ArgumentException(SR.Arg_PropSetGet, "bindingFlags");
3736 }
3737 if ((bindingFlags & BindingFlags.InvokeMethod) != 0 && ((uint)(bindingFlags & (BindingFlags.InvokeMethod | BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty)) & 0xFFFFEEFFu) != 0)
3738 {
3739 throw new ArgumentException(SR.Arg_PropSetInvoke, "bindingFlags");
3740 }
3741 if ((bindingFlags & BindingFlags.SetProperty) != 0 && ((uint)(bindingFlags & (BindingFlags.InvokeMethod | BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty)) & 0xFFFFDFFFu) != 0)
3742 {
3743 throw new ArgumentException(SR.Arg_COMPropSetPut, "bindingFlags");
3744 }
3745 if ((bindingFlags & BindingFlags.PutDispProperty) != 0 && ((uint)(bindingFlags & (BindingFlags.InvokeMethod | BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty)) & 0xFFFFBFFFu) != 0)
3746 {
3747 throw new ArgumentException(SR.Arg_COMPropSetPut, "bindingFlags");
3748 }
3749 if ((bindingFlags & BindingFlags.PutRefDispProperty) != 0 && ((uint)(bindingFlags & (BindingFlags.InvokeMethod | BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty)) & 0xFFFF7FFFu) != 0)
3750 {
3751 throw new ArgumentException(SR.Arg_COMPropSetPut, "bindingFlags");
3752 }
3753 if (name == null)
3754 {
3755 throw new ArgumentNullException("name");
3756 }
3757 bool[] byrefModifiers = modifiers?[0].IsByRefArray;
3758 int culture2 = culture?.LCID ?? 1033;
3759 bool flag = (bindingFlags & BindingFlags.DoNotWrapExceptions) != 0;
3760 try
3761 {
3763 }
3764 catch (TargetInvocationException ex) when (flag)
3765 {
3766 throw ex.InnerException;
3767 }
3768 }
3769 if (namedParams != null && Array.IndexOf(namedParams, null) != -1)
3770 {
3771 throw new ArgumentException(SR.Arg_NamedParamNull, "namedParams");
3772 }
3773 int num = ((providedArgs != null) ? providedArgs.Length : 0);
3774 if (binder == null)
3775 {
3776 binder = Type.DefaultBinder;
3777 }
3778 if ((bindingFlags & BindingFlags.CreateInstance) != 0)
3779 {
3780 if ((bindingFlags & BindingFlags.CreateInstance) != 0 && (bindingFlags & (BindingFlags.InvokeMethod | BindingFlags.GetField | BindingFlags.SetField | BindingFlags.GetProperty | BindingFlags.SetProperty)) != 0)
3781 {
3782 throw new ArgumentException(SR.Arg_CreatInstAccess, "bindingFlags");
3783 }
3784 return Activator.CreateInstance(this, bindingFlags, binder, providedArgs, culture);
3785 }
3786 if ((bindingFlags & (BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty)) != 0)
3787 {
3788 bindingFlags |= BindingFlags.SetProperty;
3789 }
3790 if (name == null)
3791 {
3792 throw new ArgumentNullException("name");
3793 }
3794 if (name.Length == 0 || name.Equals("[DISPID=0]"))
3795 {
3796 name = GetDefaultMemberName() ?? "ToString";
3797 }
3798 bool flag2 = (bindingFlags & BindingFlags.GetField) != 0;
3799 bool flag3 = (bindingFlags & BindingFlags.SetField) != 0;
3800 if (flag2 || flag3)
3801 {
3802 if (flag2)
3803 {
3804 if (flag3)
3805 {
3806 throw new ArgumentException(SR.Arg_FldSetGet, "bindingFlags");
3807 }
3808 if ((bindingFlags & BindingFlags.SetProperty) != 0)
3809 {
3810 throw new ArgumentException(SR.Arg_FldGetPropSet, "bindingFlags");
3811 }
3812 }
3813 else
3814 {
3815 if (providedArgs == null)
3816 {
3817 throw new ArgumentNullException("providedArgs");
3818 }
3819 if ((bindingFlags & BindingFlags.GetProperty) != 0)
3820 {
3821 throw new ArgumentException(SR.Arg_FldSetPropGet, "bindingFlags");
3822 }
3823 if ((bindingFlags & BindingFlags.InvokeMethod) != 0)
3824 {
3825 throw new ArgumentException(SR.Arg_FldSetInvoke, "bindingFlags");
3826 }
3827 }
3828 FieldInfo fieldInfo = null;
3830 if (array.Length == 1)
3831 {
3832 fieldInfo = array[0];
3833 }
3834 else if (array.Length != 0)
3835 {
3836 fieldInfo = binder.BindToField(bindingFlags, array, flag2 ? Empty.Value : providedArgs[0], culture);
3837 }
3838 if (fieldInfo != null)
3839 {
3840 if (fieldInfo.FieldType.IsArray || (object)fieldInfo.FieldType == typeof(Array))
3841 {
3842 int num2 = (((bindingFlags & BindingFlags.GetField) == 0) ? (num - 1) : num);
3843 if (num2 > 0)
3844 {
3845 int[] array2 = new int[num2];
3846 for (int i = 0; i < num2; i++)
3847 {
3848 try
3849 {
3850 array2[i] = ((IConvertible)providedArgs[i]).ToInt32(null);
3851 }
3852 catch (InvalidCastException)
3853 {
3854 throw new ArgumentException(SR.Arg_IndexMustBeInt);
3855 }
3856 }
3857 Array array3 = (Array)fieldInfo.GetValue(target);
3858 if ((bindingFlags & BindingFlags.GetField) != 0)
3859 {
3860 return array3.GetValue(array2);
3861 }
3862 array3.SetValue(providedArgs[num2], array2);
3863 return null;
3864 }
3865 }
3866 if (flag2)
3867 {
3868 if (num != 0)
3869 {
3870 throw new ArgumentException(SR.Arg_FldGetArgErr, "bindingFlags");
3871 }
3872 return fieldInfo.GetValue(target);
3873 }
3874 if (num != 1)
3875 {
3876 throw new ArgumentException(SR.Arg_FldSetArgErr, "bindingFlags");
3877 }
3878 fieldInfo.SetValue(target, providedArgs[0], bindingFlags, binder, culture);
3879 return null;
3880 }
3881 if ((bindingFlags & (BindingFlags)16773888) == 0)
3882 {
3883 throw new MissingFieldException(FullName, name);
3884 }
3885 }
3886 bool flag4 = (bindingFlags & BindingFlags.GetProperty) != 0;
3887 bool flag5 = (bindingFlags & BindingFlags.SetProperty) != 0;
3888 if (flag4 || flag5)
3889 {
3890 if (flag4)
3891 {
3892 if (flag5)
3893 {
3894 throw new ArgumentException(SR.Arg_PropSetGet, "bindingFlags");
3895 }
3896 }
3897 else if ((bindingFlags & BindingFlags.InvokeMethod) != 0)
3898 {
3899 throw new ArgumentException(SR.Arg_PropSetInvoke, "bindingFlags");
3900 }
3901 }
3902 MethodInfo[] array4 = null;
3903 MethodInfo methodInfo = null;
3904 if ((bindingFlags & BindingFlags.InvokeMethod) != 0)
3905 {
3907 List<MethodInfo> list = null;
3908 foreach (MethodInfo methodInfo2 in array5)
3909 {
3911 {
3912 continue;
3913 }
3914 if (methodInfo == null)
3915 {
3917 continue;
3918 }
3919 if (list == null)
3920 {
3921 list = new List<MethodInfo>(array5.Length) { methodInfo };
3922 }
3924 }
3925 if (list != null)
3926 {
3927 array4 = list.ToArray();
3928 }
3929 }
3930 if ((methodInfo == null && flag4) || flag5)
3931 {
3933 List<MethodInfo> list2 = null;
3934 for (int k = 0; k < array6.Length; k++)
3935 {
3936 MethodInfo methodInfo3 = null;
3937 methodInfo3 = ((!flag5) ? array6[k].GetGetMethod(nonPublic: true) : array6[k].GetSetMethod(nonPublic: true));
3939 {
3940 continue;
3941 }
3942 if (methodInfo == null)
3943 {
3945 continue;
3946 }
3947 if (list2 == null)
3948 {
3949 list2 = new List<MethodInfo>(array6.Length) { methodInfo };
3950 }
3952 }
3953 if (list2 != null)
3954 {
3955 array4 = list2.ToArray();
3956 }
3957 }
3958 if (methodInfo != null)
3959 {
3960 if (array4 == null && num == 0 && methodInfo.GetParametersNoCopy().Length == 0 && (bindingFlags & BindingFlags.OptionalParamBinding) == 0)
3961 {
3962 return methodInfo.Invoke(target, bindingFlags, binder, providedArgs, culture);
3963 }
3964 if (array4 == null)
3965 {
3966 array4 = new MethodInfo[1] { methodInfo };
3967 }
3968 if (providedArgs == null)
3969 {
3970 providedArgs = Array.Empty<object>();
3971 }
3972 object state = null;
3973 MethodBase methodBase = null;
3974 try
3975 {
3980 }
3981 catch (MissingMethodException)
3982 {
3983 }
3984 if (methodBase == null)
3985 {
3986 throw new MissingMethodException(FullName, name);
3987 }
3988 object result = ((MethodInfo)methodBase).Invoke(target, bindingFlags, binder, providedArgs, culture);
3989 if (state != null)
3990 {
3991 binder.ReorderArgumentArray(ref providedArgs, state);
3992 }
3993 return result;
3994 }
3995 throw new MissingMethodException(FullName, name);
3996 }
void Add(TKey key, TValue value)
string GetDefaultMemberName()
static bool FilterApplyMethodInfo(RuntimeMethodInfo method, BindingFlags bindingFlags, CallingConventions callConv, Type[] argumentTypes)
override string FullName
override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr)
override bool IsGenericParameter
object InvokeDispMethod(string name, BindingFlags invokeAttr, object target, object[] args, bool[] byrefModifiers, int culture, string[] namedParameters)

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.SR.Arg_COMAccess, System.SR.Arg_COMPropSetPut, System.SR.Arg_CreatInstAccess, System.SR.Arg_FldGetArgErr, System.SR.Arg_FldGetPropSet, System.SR.Arg_FldSetArgErr, System.SR.Arg_FldSetGet, System.SR.Arg_FldSetInvoke, System.SR.Arg_FldSetPropGet, System.SR.Arg_GenericParameter, System.SR.Arg_IndexMustBeInt, System.SR.Arg_NamedParamNull, System.SR.Arg_NamedParamTooBig, System.SR.Arg_NoAccessSpec, System.SR.Arg_PropSetGet, System.SR.Arg_PropSetInvoke, System.array, System.Reflection.Array, System.Activator.CreateInstance(), System.culture, System.Type.DefaultBinder, System.FullName, System.Array.IndexOf(), System.list, System.match, System.state, and System.Empty.Value.

Referenced by System.RuntimeType.ForwardCallToInvokeMember(), and System.Reflection.Emit.TypeBuilder.InvokeMember().