private static RavenJToken ToRavenJToken(JsInstance v)
{
switch (v.Class)
{
case JsInstance.TYPE_OBJECT:
case JsInstance.CLASS_OBJECT:
return ToRavenJObject((JsObject)v);
case JsInstance.CLASS_DATE:
var dt = (DateTime)v.Value;
return new RavenJValue(dt);
case JsInstance.TYPE_NUMBER:
case JsInstance.CLASS_NUMBER:
var num = (double)v.Value;
var integer = Math.Truncate(num);
if (Math.Abs(num - integer) < double.Epsilon)
return new RavenJValue((long)integer);
return new RavenJValue(num);
case JsInstance.TYPE_STRING:
case JsInstance.TYPE_BOOLEAN:
case JsInstance.CLASS_STRING:
case JsInstance.CLASS_BOOLEAN:
return new RavenJValue(v.Value);
case JsInstance.CLASS_NULL:
case JsInstance.TYPE_NULL:
return RavenJValue.Null;
case JsInstance.CLASS_UNDEFINED:
case JsInstance.TYPE_UNDEFINED:
return RavenJValue.Null;
case JsInstance.CLASS_ARRAY:
var jsArray = ((JsArray)v);
var rja = new RavenJArray();
for (int i = 0; i < jsArray.Length; i++)
{
var jsInstance = jsArray.get(i);
var ravenJToken = ToRavenJToken(jsInstance);
if (ravenJToken == null)
continue;
rja.Add(ravenJToken);
}
return rja;
case JsInstance.CLASS_REGEXP:
case JsInstance.CLASS_ERROR:
case JsInstance.CLASS_ARGUMENTS:
case JsInstance.CLASS_DESCRIPTOR:
case JsInstance.CLASS_FUNCTION:
return null;
default:
throw new NotSupportedException(v.Class);
}
}