JS_ReportError(cx, "cyclic %s value", object_props[slot].name);
JS_ReportErrorNumber(cx, NULL, JSMSG_CYCLIC_VALUE, object_props[slot].name);
obj_setSlot(JSContext *cx, JSObject *obj, jsval id, jsval *vp){    JSObject *obj2;    jsint slot;    if (!JSVAL_IS_OBJECT(*vp))	return JS_TRUE;    obj2 = JSVAL_TO_OBJECT(*vp);    slot = JSVAL_TO_INT(id);    while (obj2) {	if (obj2 == obj) {	    JS_ReportError(cx, "cyclic %s value", object_props[slot].name);	    return JS_FALSE;	}	obj2 = JSVAL_TO_OBJECT(OBJ_GET_SLOT(cx, obj2, slot));    }    OBJ_SET_SLOT(cx, obj, slot, *vp);    return JS_TRUE;}