nargs = MAXARGS(fp); for (slot = 0; slot < nargs; slot++) {
argc = fp->argc; for (slot = 0; slot < argc; slot++) {
args_enumerate(JSContext *cx, JSObject *obj){    JSStackFrame *fp;    JSObject *pobj;    JSProperty *prop;    uintN slot, nargs;    fp = (JSStackFrame *)         JS_GetInstancePrivate(cx, obj, &js_ArgumentsClass, NULL);    if (!fp)        return JS_TRUE;    JS_ASSERT(fp->argsobj);    /*     * Trigger reflection with value snapshot in args_resolve using a series     * of js_LookupProperty calls.  We handle length, callee, and the indexed     * argument properties.  We know that args_resolve covers all these cases     * and creates direct properties of obj, but that it may fail to resolve     * length or callee if overridden.     */    if (!js_LookupProperty(cx, obj,                           ATOM_TO_JSID(cx->runtime->atomState.lengthAtom),                           &pobj, &prop)) {        return JS_FALSE;    }    if (prop)        OBJ_DROP_PROPERTY(cx, pobj, prop);    if (!js_LookupProperty(cx, obj,                           ATOM_TO_JSID(cx->runtime->atomState.calleeAtom),                           &pobj, &prop)) {        return JS_FALSE;    }    if (prop)        OBJ_DROP_PROPERTY(cx, pobj, prop);    nargs = MAXARGS(fp);    for (slot = 0; slot < nargs; slot++) {        if (!js_LookupProperty(cx, obj, INT_TO_JSID((jsint)slot), &pobj, &prop))            return JS_FALSE;        if (prop)            OBJ_DROP_PROPERTY(cx, pobj, prop);    }    return JS_TRUE;}