return JS_FALSE; if (!IndexToId(cx, last + argc, &id2))
array_unshift(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,              jsval *rval){    jsuint length, last;    uintN i;    jsid id, id2;    jsval *vp, junk;    if (!js_GetLengthProperty(cx, obj, &length))        return JS_FALSE;    if (argc > 0) {        /* Slide up the array to make room for argc at the bottom. */        if (length > 0) {            last = length;            vp = argv + argc;            while (last--) {                if (!IndexToExistingId(cx, obj, last, &id))                    return JS_FALSE;                if (id == JSID_HOLE) {                    OBJ_DELETE_PROPERTY(cx, obj, id2, &junk);                    continue;                }                if (!OBJ_GET_PROPERTY(cx, obj, id, vp))                    return JS_FALSE;                if (!IndexToId(cx, last + argc, &id2))                    return JS_FALSE;                if (!OBJ_SET_PROPERTY(cx, obj, id2, vp))                    return JS_FALSE;            }        }        /* Copy from argv to the bottom of the array. */        for (i = 0; i < argc; i++) {            if (!IndexToId(cx, i, &id))                return JS_FALSE;            if (!OBJ_SET_PROPERTY(cx, obj, id, &argv[i]))                return JS_FALSE;        }        /* Follow Perl by returning the new array length. */        length += argc;        if (!js_SetLengthProperty(cx, obj, length))            return JS_FALSE;    }    return IndexToValue(cx, length, rval);}