static JSBool Iterator(JSContext *cx, JSObject *iterobj, uintN argc, jsval *argv, jsval *rval) { JSBool keyonly; uintN flags; JSObject *obj; keyonly = js_ValueToBoolean(argv[1]); flags = keyonly ? 0 : JSITER_FOREACH; if (cx->fp->flags & JSFRAME_CONSTRUCTING) { /* XXX work around old valueOf call hidden beneath js_ValueToObject */ if (!JSVAL_IS_PRIMITIVE(argv[0])) { obj = JSVAL_TO_OBJECT(argv[0]); } else { obj = js_ValueToNonNullObject(cx, argv[0]); if (!obj) return JS_FALSE; argv[0] = OBJECT_TO_JSVAL(obj); } return InitNativeIterator(cx, iterobj, obj, flags); } *rval = argv[0]; return js_ValueToIterator(cx, flags, rval); }
static JSBool Boolean(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { JSBool b; jsval bval; if (argc != 0) { if (!js_ValueToBoolean(cx, argv[0], &b)) return JS_FALSE; bval = BOOLEAN_TO_JSVAL(b); } else { bval = JSVAL_FALSE; } if (!(cx->fp->flags & JSFRAME_CONSTRUCTING)) { *rval = bval; return JS_TRUE; } OBJ_SET_SLOT(cx, obj, JSSLOT_PRIVATE, bval); return JS_TRUE; }