|
@@ -21,16 +21,39 @@ namespace Jint.Runtime.Interop
|
|
|
|
|
|
public override JsValue Call(JsValue thisObject, JsValue[] arguments)
|
|
|
{
|
|
|
+ var parameterInfos = _d.Method.GetParameters();
|
|
|
+
|
|
|
// convert parameter to expected types
|
|
|
- var parameters = new object[arguments.Length];
|
|
|
+ var parameters = new object[parameterInfos.Length];
|
|
|
for (var i = 0; i < arguments.Length; i++)
|
|
|
{
|
|
|
- parameters[i] = Engine.Options.GetTypeConverter().Convert(
|
|
|
- arguments[i].ToObject(),
|
|
|
- _d.Method.GetParameters()[i].ParameterType,
|
|
|
- CultureInfo.InvariantCulture);
|
|
|
+ var parameterType = parameterInfos[i].ParameterType;
|
|
|
+
|
|
|
+ if (parameterType == typeof (JsValue))
|
|
|
+ {
|
|
|
+ parameters[i] = arguments[i];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ parameters[i] = Engine.Options.GetTypeConverter().Convert(
|
|
|
+ arguments[i].ToObject(),
|
|
|
+ parameterType,
|
|
|
+ CultureInfo.InvariantCulture);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ // assign null to parameters not provided
|
|
|
+ for (var i = arguments.Length; i < parameterInfos.Length; i++)
|
|
|
+ {
|
|
|
+ if (parameterInfos[i].ParameterType.IsValueType)
|
|
|
+ {
|
|
|
+ parameters[i] = Activator.CreateInstance(parameterInfos[i].ParameterType);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ parameters[i] = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
return JsValue.FromObject(Engine, _d.DynamicInvoke(parameters));
|
|
|
}
|