コード例 #1
0
        private int GetMemberRefToken(MethodBase methodInfo, Type[] optionalParameterTypes)
        {
            Type[] parameterTypes;

            if (optionalParameterTypes != null && (methodInfo.CallingConvention & CallingConventions.VarArgs) == 0)
            {
                throw new InvalidOperationException(SR.InvalidOperation_NotAVarArgCallingConvention);
            }

            RuntimeMethodInfo rtMeth = methodInfo as RuntimeMethodInfo;
            DynamicMethod     dm     = methodInfo as DynamicMethod;

            if (rtMeth == null && dm == null)
            {
                throw new ArgumentException(SR.Argument_MustBeRuntimeMethodInfo, nameof(methodInfo));
            }

            ParameterInfo[] paramInfo = methodInfo.GetParametersNoCopy();
            if (paramInfo != null && paramInfo.Length != 0)
            {
                parameterTypes = new Type[paramInfo.Length];
                for (int i = 0; i < paramInfo.Length; i++)
                {
                    parameterTypes[i] = paramInfo[i].ParameterType;
                }
            }
            else
            {
                parameterTypes = null;
            }

            SignatureHelper sig = GetMemberRefSignature(methodInfo.CallingConvention,
                                                        MethodBuilder.GetMethodBaseReturnType(methodInfo),
                                                        parameterTypes,
                                                        optionalParameterTypes);

            if (rtMeth != null)
            {
                return(GetTokenForVarArgMethod(rtMeth, sig));
            }
            else
            {
                return(GetTokenForVarArgMethod(dm, sig));
            }
        }
コード例 #2
0
        private int GetMemberRefToken(MethodBase methodInfo, Type[] optionalParameterTypes)
        {
            if (optionalParameterTypes != null && (methodInfo.CallingConvention & CallingConventions.VarArgs) == (CallingConventions)0)
            {
                throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NotAVarArgCallingConvention"));
            }
            RuntimeMethodInfo rtMeth = methodInfo as RuntimeMethodInfo;
            DynamicMethod     dm     = methodInfo as DynamicMethod;

            if ((MethodInfo)rtMeth == (MethodInfo)null && (MethodInfo)dm == (MethodInfo)null)
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeMethodInfo"), "methodInfo");
            }
            ParameterInfo[] parametersNoCopy = methodInfo.GetParametersNoCopy();
            Type[]          parameterTypes;
            if (parametersNoCopy != null && parametersNoCopy.Length != 0)
            {
                parameterTypes = new Type[parametersNoCopy.Length];
                for (int index = 0; index < parametersNoCopy.Length; ++index)
                {
                    parameterTypes[index] = parametersNoCopy[index].ParameterType;
                }
            }
            else
            {
                parameterTypes = (Type[])null;
            }
            SignatureHelper memberRefSignature = this.GetMemberRefSignature(methodInfo.CallingConvention, MethodBuilder.GetMethodBaseReturnType(methodInfo), parameterTypes, optionalParameterTypes);

            if ((MethodInfo)rtMeth != (MethodInfo)null)
            {
                return(this.GetTokenForVarArgMethod(rtMeth, memberRefSignature));
            }
            return(this.GetTokenForVarArgMethod(dm, memberRefSignature));
        }
コード例 #3
0
        internal override int GetMemberRefToken(MethodBase methodInfo, Type[] optionalParameterTypes)
        {
            Type[] typeArray;
            if ((optionalParameterTypes != null) && ((methodInfo.CallingConvention & CallingConventions.VarArgs) == 0))
            {
                throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NotAVarArgCallingConvention"));
            }
            if (!((methodInfo is RuntimeMethodInfo) || (methodInfo is DynamicMethod)))
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeMethodInfo"), "methodInfo");
            }
            ParameterInfo[] parametersNoCopy = methodInfo.GetParametersNoCopy();
            if ((parametersNoCopy != null) && (parametersNoCopy.Length != 0))
            {
                typeArray = new Type[parametersNoCopy.Length];
                for (int i = 0; i < parametersNoCopy.Length; i++)
                {
                    typeArray[i] = parametersNoCopy[i].ParameterType;
                }
            }
            else
            {
                typeArray = null;
            }
            SignatureHelper signature = this.GetMemberRefSignature(methodInfo.CallingConvention, MethodBuilder.GetMethodBaseReturnType(methodInfo), typeArray, optionalParameterTypes);

            return(this.m_scope.GetTokenFor(new VarArgMethod(methodInfo as RuntimeMethodInfo, methodInfo as DynamicMethod, signature)));
        }
コード例 #4
0
        private int GetMemberRefToken(MethodBase methodInfo, Type[] optionalParameterTypes)
        {
            if (optionalParameterTypes != null && (methodInfo.CallingConvention & CallingConventions.VarArgs) == (CallingConventions)0)
            {
                throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_NotAVarArgCallingConvention"));
            }
            RuntimeMethodInfo runtimeMethodInfo = methodInfo as RuntimeMethodInfo;
            DynamicMethod     dynamicMethod     = methodInfo as DynamicMethod;

            if (runtimeMethodInfo == null && dynamicMethod == null)
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeMethodInfo"), "methodInfo");
            }
            ParameterInfo[] parametersNoCopy = methodInfo.GetParametersNoCopy();
            Type[]          array;
            if (parametersNoCopy != null && parametersNoCopy.Length != 0)
            {
                array = new Type[parametersNoCopy.Length];
                for (int i = 0; i < parametersNoCopy.Length; i++)
                {
                    array[i] = parametersNoCopy[i].ParameterType;
                }
            }
            else
            {
                array = null;
            }
            SignatureHelper memberRefSignature = this.GetMemberRefSignature(methodInfo.CallingConvention, MethodBuilder.GetMethodBaseReturnType(methodInfo), array, optionalParameterTypes);

            if (runtimeMethodInfo != null)
            {
                return(this.GetTokenForVarArgMethod(runtimeMethodInfo, memberRefSignature));
            }
            return(this.GetTokenForVarArgMethod(dynamicMethod, memberRefSignature));
        }