JSObject *obj2; JSProperty *prop;
obj_propertyIsEnumerable(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                         jsval *rval){    JSObject *obj2;    JSProperty *prop;    JSAtom *atom;    uintN attrs;    JSBool ok;    atom = js_ValueToStringAtom(cx, *argv);    if (atom == NULL || !OBJ_LOOKUP_PROPERTY(cx, obj, (jsid)atom, &obj2, &prop))        return JS_FALSE;    if (!prop) {        *rval = JSVAL_FALSE;        return JS_TRUE;    }    ok = OBJ_GET_ATTRIBUTES(cx, obj2, (jsid)atom, prop, &attrs);    if (ok)        *rval = BOOLEAN_TO_JSVAL((attrs & JSPROP_ENUMERATE) != 0);    OBJ_DROP_PROPERTY(cx, obj2, prop);    return ok;}