/* ToPrimitive() on a value */ void jsV_toprimitive(js_State *J, js_Value *v, int preferred) { js_Object *obj; if (v->type != JS_TOBJECT) return; obj = v->u.object; if (preferred == JS_HNONE) preferred = obj->type == JS_CDATE ? JS_HSTRING : JS_HNUMBER; if (preferred == JS_HSTRING) { if (jsV_toString(J, obj) || jsV_valueOf(J, obj)) { *v = *js_tovalue(J, -1); js_pop(J, 1); return; } } else { if (jsV_valueOf(J, obj) || jsV_toString(J, obj)) { *v = *js_tovalue(J, -1); js_pop(J, 1); return; } } v->type = JS_TLITSTR; v->u.litstr = "[object]"; return; }
/* ToPrimitive() on a value */ js_Value jsV_toprimitive(js_State *J, const js_Value *v, int preferred) { js_Value vv; js_Object *obj; if (v->type != JS_TOBJECT) return *v; obj = v->u.object; if (preferred == JS_HNONE) preferred = obj->type == JS_CDATE ? JS_HSTRING : JS_HNUMBER; if (preferred == JS_HSTRING) { if (jsV_toString(J, obj) || jsV_valueOf(J, obj)) { vv = js_tovalue(J, -1); js_pop(J, 1); return vv; } } else { if (jsV_valueOf(J, obj) || jsV_toString(J, obj)) { vv = js_tovalue(J, -1); js_pop(J, 1); return vv; } } js_typeerror(J, "cannot convert object to primitive"); }