Ejemplo n.º 1
0
 internal static MethodInfo MatchesPropertyRequirements(Symbols.Method TargetProcedure, BindingFlags Flags)
 {
     if (Symbols.HasFlag(Flags, BindingFlags.SetProperty))
     {
         return(TargetProcedure.AsProperty().GetSetMethod());
     }
     return(TargetProcedure.AsProperty().GetGetMethod());
 }
Ejemplo n.º 2
0
 internal static Exception ReportPropertyMismatch(Symbols.Method TargetProcedure, BindingFlags Flags)
 {
     if (Symbols.HasFlag(Flags, BindingFlags.SetProperty))
     {
         return((Exception) new MissingMemberException(Utils.GetResourceString("NoSetProperty1", new string[1]
         {
             TargetProcedure.AsProperty().Name
         })));
     }
     return((Exception) new MissingMemberException(Utils.GetResourceString("NoGetProperty1", new string[1]
     {
         TargetProcedure.AsProperty().Name
     })));
 }
Ejemplo n.º 3
0
 private static object CallMethod(Symbols.Container BaseReference, string MethodName, object[] Arguments, string[] ArgumentNames, Type[] TypeArguments, bool[] CopyBack, BindingFlags InvocationFlags, bool ReportErrors, ref OverloadResolution.ResolutionFailure Failure)
 {
     Failure = OverloadResolution.ResolutionFailure.None;
     if (ArgumentNames.Length > Arguments.Length || CopyBack != null && CopyBack.Length != Arguments.Length)
     {
         Failure = OverloadResolution.ResolutionFailure.InvalidArgument;
         if (ReportErrors)
         {
             throw new ArgumentException(Utils.GetResourceString("Argument_InvalidValue"));
         }
         return((object)null);
     }
     if (Symbols.HasFlag(InvocationFlags, BindingFlags.SetProperty) && Arguments.Length < 1)
     {
         Failure = OverloadResolution.ResolutionFailure.InvalidArgument;
         if (ReportErrors)
         {
             throw new ArgumentException(Utils.GetResourceString("Argument_InvalidValue"));
         }
         return((object)null);
     }
     MemberInfo[] members = BaseReference.GetMembers(ref MethodName, ReportErrors);
     if (members == null || members.Length == 0)
     {
         Failure = OverloadResolution.ResolutionFailure.MissingMember;
         if (ReportErrors)
         {
             BaseReference.GetMembers(ref MethodName, true);
         }
         return((object)null);
     }
     Symbols.Method TargetProcedure = NewLateBinding.ResolveCall(BaseReference, MethodName, members, Arguments, ArgumentNames, TypeArguments, InvocationFlags, ReportErrors, ref Failure);
     if (Failure == OverloadResolution.ResolutionFailure.None)
     {
         return(BaseReference.InvokeMethod(TargetProcedure, Arguments, CopyBack, InvocationFlags));
     }
     return((object)null);
 }
Ejemplo n.º 4
0
        internal static Symbols.Method ResolveCall(Symbols.Container BaseReference, string MethodName, MemberInfo[] Members, object[] Arguments, string[] ArgumentNames, Type[] TypeArguments, BindingFlags LookupFlags, bool ReportErrors, ref OverloadResolution.ResolutionFailure Failure)
        {
            Failure = OverloadResolution.ResolutionFailure.None;
            if (Members[0].MemberType != MemberTypes.Method && Members[0].MemberType != MemberTypes.Property)
            {
                Failure = OverloadResolution.ResolutionFailure.InvalidTarget;
                if (ReportErrors)
                {
                    throw new ArgumentException(Utils.GetResourceString("ExpressionNotProcedure", MethodName, BaseReference.VBFriendlyName));
                }
                return((Symbols.Method)null);
            }
            int    length = Arguments.Length;
            object obj1   = (object)null;

            if (Symbols.HasFlag(LookupFlags, BindingFlags.SetProperty))
            {
                if (Arguments.Length == 0)
                {
                    Failure = OverloadResolution.ResolutionFailure.InvalidArgument;
                    if (ReportErrors)
                    {
                        throw new InvalidCastException(Utils.GetResourceString("PropertySetMissingArgument1", new string[1]
                        {
                            MethodName
                        }));
                    }
                    return((Symbols.Method)null);
                }
                object[] objArray = Arguments;
                Arguments = new object[checked (length - 2 + 1)];
                Array.Copy((Array)objArray, (Array)Arguments, Arguments.Length);
                obj1 = objArray[checked (length - 1)];
            }
            Symbols.Method TargetProcedure1 = OverloadResolution.ResolveOverloadedCall(MethodName, Members, Arguments, ArgumentNames, TypeArguments, LookupFlags, ReportErrors, ref Failure);
            if (Failure != OverloadResolution.ResolutionFailure.None)
            {
                return((Symbols.Method)null);
            }
            if (!TargetProcedure1.ArgumentsValidated && !OverloadResolution.CanMatchArguments(TargetProcedure1, Arguments, ArgumentNames, TypeArguments, false, (List <string>)null))
            {
                Failure = OverloadResolution.ResolutionFailure.InvalidArgument;
                if (ReportErrors)
                {
                    string        str    = "";
                    List <string> Errors = new List <string>();
                    OverloadResolution.CanMatchArguments(TargetProcedure1, Arguments, ArgumentNames, TypeArguments, false, Errors);
                    List <string> .Enumerator enumerator = Ported.VisualBasic.CompilerServices.OverloadResolution.InitEnumerator <string>();
                    try
                    {
                        enumerator = Errors.GetEnumerator();
                        while (enumerator.MoveNext())
                        {
                            string current = enumerator.Current;
                            str = str + "\r\n    " + current;
                        }
                    }
                    finally
                    {
                        enumerator.Dispose();
                    }
                    throw new InvalidCastException(Utils.GetResourceString("MatchArgumentFailure2", TargetProcedure1.ToString(), str));
                }
                return((Symbols.Method)null);
            }
            if (TargetProcedure1.IsProperty)
            {
                if (NewLateBinding.MatchesPropertyRequirements(TargetProcedure1, LookupFlags) == null)
                {
                    Failure = OverloadResolution.ResolutionFailure.InvalidTarget;
                    if (ReportErrors)
                    {
                        throw NewLateBinding.ReportPropertyMismatch(TargetProcedure1, LookupFlags);
                    }
                    return((Symbols.Method)null);
                }
            }
            else if (Symbols.HasFlag(LookupFlags, BindingFlags.SetProperty))
            {
                Failure = OverloadResolution.ResolutionFailure.InvalidTarget;
                if (ReportErrors)
                {
                    throw new MissingMemberException(Utils.GetResourceString("MethodAssignment1", new string[1]
                    {
                        TargetProcedure1.AsMethod().Name
                    }));
                }
                return((Symbols.Method)null);
            }
            if (Symbols.HasFlag(LookupFlags, BindingFlags.SetProperty))
            {
                ParameterInfo[] parameters       = NewLateBinding.GetCallTarget(TargetProcedure1, LookupFlags).GetParameters();
                ParameterInfo   parameterInfo    = parameters[checked (parameters.Length - 1)];
                Symbols.Method  TargetProcedure2 = TargetProcedure1;
                object          obj2             = obj1;
                ParameterInfo   Parameter1       = parameterInfo;
                int             num1             = 0;
                int             num2             = 0;
                // ISSUE: variable of the null type
                object   local1 = null;
                bool     flag1  = false;
                ref bool local2 = ref flag1;
                bool     flag2  = false;
                ref bool local3 = ref flag2;