Esempio n. 1
0
        public static MethodDefinition GetMethod(Collection <MethodDefinition> methods, MethodReference reference)
        {
            for (int i = 0; i < methods.Count; i++)
            {
                var method = methods [i];

                if (method.Name != reference.Name)
                {
                    continue;
                }

                if (method.HasGenericParameters != reference.HasGenericParameters)
                {
                    continue;
                }

                if (method.HasGenericParameters && method.GenericParameters.Count != reference.GenericParameters.Count)
                {
                    continue;
                }

                if (!AreSame(method.ReturnType, reference.ReturnType))
                {
                    continue;
                }

                if (method.IsVarArg() != reference.IsVarArg())
                {
                    continue;
                }

                if (method.IsVarArg() && IsVarArgCallTo(method, reference))
                {
                    return(method);
                }

                if (method.HasParameters != reference.HasParameters)
                {
                    continue;
                }

                if (!method.HasParameters && !reference.HasParameters)
                {
                    return(method);
                }

                if (!AreSame(method.Parameters, reference.Parameters))
                {
                    continue;
                }

                return(method);
            }

            return(null);
        }
Esempio n. 2
0
        public MethodReference ImportMethod(MethodReference method, IGenericContext context)
        {
            if (method.IsGenericInstance)
            {
                return(ImportMethodSpecification(method, context));
            }

            var declaring_type = ImportType(method.DeclaringType, context);

            var reference = new MethodReference {
                Name          = method.Name,
                HasThis       = method.HasThis,
                ExplicitThis  = method.ExplicitThis,
                DeclaringType = declaring_type,
            };

            if (method.IsVarArg())
            {
                reference.CallingConvention &= MethodCallingConvention.VarArg;
            }

            if (method.HasGenericParameters)
            {
                ImportGenericParameters(reference, method);
            }

            reference.ReturnType = ImportType(method.ReturnType, context ?? reference);

            if (!method.HasParameters)
            {
                return(reference);
            }

            var reference_parameters = reference.Parameters;

            var parameters = method.Parameters;

            for (int i = 0; i < parameters.Count; i++)
            {
                reference_parameters.Add(
                    new ParameterDefinition(ImportType(parameters [i].ParameterType, context ?? reference)));
            }

            return(reference);
        }
Esempio n. 3
0
        public MethodReference ImportMethod(MethodReference method, IGenericContext context)
        {
            if (method.IsGenericInstance)
                return ImportMethodSpecification (method, context);

            var declaring_type = ImportType (method.DeclaringType, context);

            var reference = new MethodReference {
                Name = method.Name,
                HasThis = method.HasThis,
                ExplicitThis = method.ExplicitThis,
                DeclaringType = declaring_type,
            };

            if (method.IsVarArg ())
                reference.CallingConvention &= MethodCallingConvention.VarArg;

            if (method.HasGenericParameters)
                ImportGenericParameters (reference, method);

            reference.ReturnType = ImportType (method.ReturnType, context ?? reference);

            if (!method.HasParameters)
                return reference;

            var reference_parameters = reference.Parameters;

            var parameters = method.Parameters;
            for (int i = 0; i < parameters.Count; i++)
                reference_parameters.Add (
                    new ParameterDefinition (ImportType (parameters [i].ParameterType, context ?? reference)));

            return reference;
        }
Esempio n. 4
0
		public static MethodDefinition GetMethod (Collection<MethodDefinition> methods, MethodReference reference)
		{
			for (int i = 0; i < methods.Count; i++) {
				var method = methods [i];

				if (method.Name != reference.Name)
					continue;

				if (method.HasGenericParameters != reference.HasGenericParameters)
					continue;

				if (method.HasGenericParameters && method.GenericParameters.Count != reference.GenericParameters.Count)
					continue;

				if (!AreSame (method.ReturnType, reference.ReturnType))
					continue;

				if (method.IsVarArg () != reference.IsVarArg ())
					continue;

				if (method.IsVarArg () && IsVarArgCallTo (method, reference))
					return method;

				if (method.HasParameters != reference.HasParameters)
					continue;

				if (!method.HasParameters && !reference.HasParameters)
					return method;

				if (!AreSame (method.Parameters, reference.Parameters))
					continue;

				return method;
			}

			return null;
		}
Esempio n. 5
0
 public static MethodDefinition GetMethod(Collection <MethodDefinition> methods, MethodReference reference)
 {
     for (int i = 0; i < methods.Count; i++)
     {
         MethodDefinition methodDefinition = methods[i];
         if (!(methodDefinition.Name != reference.Name) && methodDefinition.HasGenericParameters == reference.HasGenericParameters && (!methodDefinition.HasGenericParameters || methodDefinition.GenericParameters.Count == reference.GenericParameters.Count) && AreSame(methodDefinition.ReturnType, reference.ReturnType) && methodDefinition.IsVarArg() == reference.IsVarArg())
         {
             if (methodDefinition.IsVarArg() && IsVarArgCallTo(methodDefinition, reference))
             {
                 return(methodDefinition);
             }
             if (methodDefinition.HasParameters == reference.HasParameters)
             {
                 if (!methodDefinition.HasParameters && !reference.HasParameters)
                 {
                     return(methodDefinition);
                 }
                 if (AreSame(methodDefinition.Parameters, reference.Parameters))
                 {
                     return(methodDefinition);
                 }
             }
         }
     }
     return(null);
 }