/// <summary>
/// Converts a JsInstance object to its CLR equivalence
/// </summary>
/// <param name="parameter">The object to convert</param>
/// <returns>A CLR object</returns>
public static object ConvertParameter(JsInstance parameter)
{
if (parameter == null)
{
return(null);
}
if (parameter.Class != JsFunction.TYPEOF && parameter.Class != JsArray.TYPEOF)
{
return(parameter.Value);
}
if (parameter == JsNull.Instance)
{
return(null);
}
if (parameter.IsClr)
{
return(parameter.Value);
}
var constructor = ((JsDictionaryObject)parameter)["constructor"] as JsFunction;
if (constructor == null)
{
return(parameter);
}
switch (constructor.Name)
{
case "Date":
return(JsDateConstructor.CreateDateTime(parameter.ToNumber()));
case "String":
case "RegExp":
case "Number":
return(parameter.Value);
case "Array":
case "Object":
if (parameter.Class == JsFunction.TYPEOF)
{
return(parameter);
}
var array = new object[((JsObject)parameter).Length];
foreach (KeyValuePair <string, JsInstance> key in (JsObject)parameter)
{
int index;
if (int.TryParse(key.Key, out index))
{
array[index] = ConvertParameters(key.Value)[0];
}
}
return(new System.Collections.ArrayList(array));
default:
return(parameter);
}
}