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;
}
}