Esempio n. 1
0
 public static void LateIndexSetComplex(object Instance, object[] Arguments, string[] ArgumentNames, bool OptimisticSet, bool RValueBase)
 {
     if (Arguments == null)
     {
         Arguments = Symbols.NoArguments;
     }
     if (ArgumentNames == null)
     {
         ArgumentNames = Symbols.NoArgumentNames;
     }
     Symbols.Container BaseReference = new Symbols.Container(Instance);
     if (BaseReference.IsArray)
     {
         if (ArgumentNames.Length > 0)
         {
             throw new ArgumentException(Utils.GetResourceString("Argument_InvalidNamedArgs"));
         }
         BaseReference.SetArrayValue(Arguments);
     }
     else
     {
         if (ArgumentNames.Length > Arguments.Length)
         {
             throw new ArgumentException(Utils.GetResourceString("Argument_InvalidValue"));
         }
         if (Arguments.Length < 1)
         {
             throw new ArgumentException(Utils.GetResourceString("Argument_InvalidValue"));
         }
         string MemberName = "";
         if (BaseReference.IsCOMObject)
         {
             LateBinding.LateIndexSetComplex(Instance, Arguments, ArgumentNames, OptimisticSet, RValueBase);
         }
         else
         {
             BindingFlags bindingFlags = BindingFlags.SetProperty;
             MemberInfo[] members      = BaseReference.GetMembers(ref MemberName, true);
             OverloadResolution.ResolutionFailure Failure = OverloadResolution.ResolutionFailure.None;
             Symbols.Method TargetProcedure = NewLateBinding.ResolveCall(BaseReference, MemberName, members, Arguments, ArgumentNames, Symbols.NoTypeArguments, bindingFlags, false, ref Failure);
             if (Failure == OverloadResolution.ResolutionFailure.None)
             {
                 if (RValueBase && BaseReference.IsValueType)
                 {
                     throw new Exception(Utils.GetResourceString("RValueBaseForValueType", BaseReference.VBFriendlyName, BaseReference.VBFriendlyName));
                 }
                 BaseReference.InvokeMethod(TargetProcedure, Arguments, (bool[])null, bindingFlags);
             }
             else if (!OptimisticSet)
             {
                 NewLateBinding.ResolveCall(BaseReference, MemberName, members, Arguments, ArgumentNames, Symbols.NoTypeArguments, bindingFlags, true, ref Failure);
                 throw new InternalErrorException();
             }
         }
     }
 }
Esempio n. 2
0
 public void LateIndexSetComplex(object obj, object[] args, string[] paramNames, bool missing, bool valueType)
 {
     if (missing)
     {
         Assert.Throws <MissingMemberException>(() => LateBinding.LateIndexSetComplex(obj, args, paramNames, false, false));
         Assert.Throws <MissingMemberException>(() => LateBinding.LateIndexSetComplex(obj, args, paramNames, false, true));
         LateBinding.LateIndexSetComplex(obj, args, paramNames, true, false);
         LateBinding.LateIndexSetComplex(obj, args, paramNames, true, true);
     }
     else if (valueType)
     {
         LateBinding.LateIndexSetComplex(obj, args, paramNames, false, false);
         Assert.Throws <Exception>(() => LateBinding.LateIndexSetComplex(obj, args, paramNames, false, true));
         LateBinding.LateIndexSetComplex(obj, args, paramNames, true, false);
         Assert.Throws <Exception>(() => LateBinding.LateIndexSetComplex(obj, args, paramNames, true, true));
     }
     else
     {
         LateBinding.LateIndexSetComplex(obj, args, paramNames, false, false);
         LateBinding.LateIndexSetComplex(obj, args, paramNames, false, true);
         LateBinding.LateIndexSetComplex(obj, args, paramNames, true, false);
         LateBinding.LateIndexSetComplex(obj, args, paramNames, true, true);
     }
 }