bool SetProperty(JSContext *cx, HandleObject obj, HandlePropertyName name, HandleValue value, bool strict, int jsop) { RootedValue v(cx, value); RootedId id(cx, NameToId(name)); if (jsop == JSOP_SETALIASEDVAR) { // Aliased var assigns ignore readonly attributes on the property, as // required for initializing 'const' closure variables. Shape *shape = obj->nativeLookup(cx, name); JS_ASSERT(shape && shape->hasSlot()); JSObject::nativeSetSlotWithType(cx, obj, shape, value); return true; } if (JS_LIKELY(!obj->getOps()->setProperty)) { unsigned defineHow = (jsop == JSOP_SETNAME || jsop == JSOP_SETGNAME) ? DNP_UNQUALIFIED : 0; return baseops::SetPropertyHelper(cx, obj, obj, id, defineHow, &v, strict); } return JSObject::setGeneric(cx, obj, obj, id, &v, strict); }