Microsoft.JScript.LateBinding.CallMethod C# (CSharp) Method

CallMethod() private method

private CallMethod ( MethodInfo method, Object arguments, Object thisob, Binder binder, CultureInfo culture, String namedParameters ) : Object
method System.Reflection.MethodInfo
arguments Object
thisob Object
binder Binder
culture CultureInfo
namedParameters String
return Object
      private static Object CallMethod(MethodInfo method, Object[] arguments, Object thisob, Binder binder, CultureInfo culture, String[] namedParameters){
        if (namedParameters != null && namedParameters.Length > 0)
          if (arguments.Length >= namedParameters.Length)
            arguments = JSBinder.ArrangeNamedArguments(method, arguments, namedParameters);
          else
            throw new JScriptException(JSError.MoreNamedParametersThanArguments);
        Object[] newargs = LateBinding.LickArgumentsIntoShape(method.GetParameters(), arguments, binder, culture);
        try{
          Object result = method.Invoke(thisob, BindingFlags.SuppressChangeType, null, newargs, null);
          if (newargs != arguments && newargs != null && arguments != null){
            //Copy elements of newargs back to arguments, in case any of them were passed by reference
            int n = arguments.Length;
            int m = newargs.Length;
            if (m < n) n = m;
            for (int i = 0; i < n; i++) arguments[i] = newargs[i];
          }
          return result;
        }catch(TargetException e){
          ClassScope csc = thisob as ClassScope;
          if (csc != null) return csc.FakeCallToTypeMethod(method, newargs, e);
          throw;
        }
      }