ok = wp->handler(cx, obj, js_IdToValue(sym_id(sym)), OBJ_GET_SLOT(cx, obj, wp->sprop->slot), vp, wp->closure);
ok = wp->handler(cx, obj, js_IdToValue(sym_id(sym)), (SPROP_HAS_VALID_SLOT(sprop)) ? OBJ_GET_SLOT(cx, obj, wp->sprop->slot) : JSVAL_VOID, vp, wp->closure);
js_watch_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp){    JSRuntime *rt;    JSWatchPoint *wp;    JSScopeProperty *sprop;    JSSymbol *sym;    jsval userid, value;    jsid symid;    JSScope *scope;    JSAtom *atom;    JSBool ok;    rt = cx->runtime;    for (wp = (JSWatchPoint *)rt->watchPointList.next;	 wp != (JSWatchPoint *)&rt->watchPointList;	 wp = (JSWatchPoint *)wp->links.next) {	sprop = wp->sprop;	if (wp->object == obj && sprop->id == id) {	    JS_LOCK_OBJ(cx, obj);	    sym = sprop->symbols;	    if (!sym) {		userid = wp->userid;		atom = NULL;		if (JSVAL_IS_INT(userid)) {		    symid = (jsid)userid;		} else {		    atom = js_ValueToStringAtom(cx, userid);		    if (!atom) {			JS_UNLOCK_OBJ(cx, obj);			return JS_FALSE;		    }		    symid = (jsid)atom;		}		scope = OBJ_SCOPE(obj);		JS_ASSERT(scope->props);		ok = LOCKED_OBJ_GET_CLASS(obj)->addProperty(cx, obj, sprop->id,							    &value);		if (!ok) {		    JS_UNLOCK_OBJ(cx, obj);		    return JS_FALSE;		}		ok = (scope->ops->add(cx, scope, symid, sprop) != NULL);		if (!ok) {		    JS_UNLOCK_OBJ(cx, obj);		    return JS_FALSE;		}		sym = sprop->symbols;	    }	    JS_UNLOCK_OBJ(cx, obj);	    HoldWatchPoint(wp);	    ok = wp->handler(cx, obj, js_IdToValue(sym_id(sym)),			     OBJ_GET_SLOT(cx, obj, wp->sprop->slot), vp,			     wp->closure);            if (ok) {                /*                 * Create pseudo-frame for call to setter so that any                  * stackwalking security code in the setter will correctly                 * identify the guilty party.                 */                JSObject *funobj = (JSObject *) wp->closure;                JSFunction *fun = (JSFunction *) JS_GetPrivate(cx, funobj);                JSStackFrame frame;                memset(&frame, 0, sizeof(frame));                frame.script = fun->script;                frame.fun = fun;                frame.down = cx->fp;                cx->fp = &frame;		ok = wp->setter(cx, obj, id, vp);                cx->fp = frame.down;            }	    DropWatchPoint(cx, wp);	    return ok;	}    }    JS_ASSERT(0);	/* XXX can't happen */    return JS_FALSE;}