bool SetProperty(JSContext *cx, HandleObject obj, HandlePropertyName name, HandleValue value, bool strict, jsbytecode *pc) { RootedValue v(cx, value); RootedId id(cx, NameToId(name)); JSOp op = JSOp(*pc); if (op == 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()); obj->nativeSetSlotWithType(cx, shape, value); return true; } if (MOZ_LIKELY(!obj->getOps()->setProperty)) { return baseops::SetPropertyHelper<SequentialExecution>( cx, obj, obj, id, (op == JSOP_SETNAME || op == JSOP_SETGNAME) ? baseops::Unqualified : baseops::Qualified, &v, strict); } return JSObject::setGeneric(cx, obj, obj, id, &v, strict); }