author | Steve Fink <sfink@mozilla.com> |
Thu, 01 Nov 2012 13:57:47 -0700 | |
changeset 112346 | be5f1f5c13c3f003b967b73696b76e944a2daa36 |
parent 112345 | 8fd8e9243788363cd60db34a050ff97069d78f66 |
child 112347 | 8a88758ffc50dbb392c42a2e95d90e59268914ae |
push id | 23812 |
push user | emorley@mozilla.com |
push date | Tue, 06 Nov 2012 14:01:34 +0000 |
treeherder | mozilla-central@f4aeed115e54 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
bugs | 807829 |
milestone | 19.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
js/src/jsinterpinlines.h | file | annotate | diff | comparison | revisions | |
js/src/jsobj.cpp | file | annotate | diff | comparison | revisions | |
js/src/jsobj.h | file | annotate | diff | comparison | revisions |
--- a/js/src/jsinterpinlines.h +++ b/js/src/jsinterpinlines.h @@ -317,17 +317,17 @@ SetPropertyOperation(JSContext *cx, jsby /* * Property cache hit, only partially confirmed by testForSet. We * know that the entry applies to regs.pc and that obj's shape * matches. * * The entry predicts a set either an existing "own" property, or * on a prototype property that has a setter. */ - Shape *shape = entry->prop; + RootedShape shape(cx, entry->prop); JS_ASSERT_IF(shape->isDataDescriptor(), shape->writable()); JS_ASSERT_IF(shape->hasSlot(), entry->isOwnPropertyHit()); if (entry->isOwnPropertyHit() || ((obj2 = obj->getProto()) && obj2->lastProperty() == entry->pshape)) { #ifdef DEBUG if (entry->isOwnPropertyHit()) { JS_ASSERT(obj->nativeLookupNoAllocation(shape->propid()) == shape);
--- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -4248,17 +4248,17 @@ JSBool js_NativeGet(JSContext *cx, Handle<JSObject*> obj, Handle<JSObject*> pobj, Shape *shape, unsigned getHow, Value *vp) { return js_NativeGetInline(cx, obj, obj, pobj, shape, getHow, vp); } JSBool js_NativeSet(JSContext *cx, Handle<JSObject*> obj, Handle<JSObject*> receiver, - Shape *shape, bool added, bool strict, Value *vp) + HandleShape shape, bool added, bool strict, Value *vp) { JS_ASSERT(obj->isNative()); if (shape->hasSlot()) { uint32_t slot = shape->slot(); /* If shape has a stub setter, just store *vp. */ if (shape->hasDefaultSetter()) { @@ -4272,32 +4272,31 @@ js_NativeSet(JSContext *cx, Handle<JSObj * Such properties effectively function as data descriptors which are * not writable, so attempting to set such a property should do nothing * or throw if we're in strict mode. */ if (!shape->hasGetterValue() && shape->hasDefaultSetter()) return js_ReportGetterOnlyAssignment(cx); } - Rooted<Shape *> shapeRoot(cx, shape); RootedValue nvp(cx, *vp); int32_t sample = cx->runtime->propertyRemovals; - if (!shapeRoot->set(cx, obj, receiver, strict, &nvp)) + if (!shape->set(cx, obj, receiver, strict, &nvp)) return false; /* * Update any slot for the shape with the value produced by the setter, * unless the setter deleted the shape. */ - if (shapeRoot->hasSlot() && + if (shape->hasSlot() && (JS_LIKELY(cx->runtime->propertyRemovals == sample) || - obj->nativeContains(cx, shapeRoot))) { + obj->nativeContains(cx, shape))) { AddTypePropertyId(cx, obj, shape->propid(), *vp); - obj->setSlot(shapeRoot->slot(), nvp); + obj->setSlot(shape->slot(), nvp); } *vp = nvp; return true; } static JS_ALWAYS_INLINE JSBool js_GetPropertyHelperInline(JSContext *cx, HandleObject obj, HandleObject receiver, jsid id_,
--- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -1290,17 +1290,17 @@ const unsigned JSGET_CACHE_RESULT = 1; / * scope containing shape unlocked. */ extern JSBool js_NativeGet(JSContext *cx, js::Handle<JSObject*> obj, js::Handle<JSObject*> pobj, js::Shape *shape, unsigned getHow, js::Value *vp); extern JSBool js_NativeSet(JSContext *cx, js::Handle<JSObject*> obj, js::Handle<JSObject*> receiver, - js::Shape *shape, bool added, bool strict, js::Value *vp); + js::Handle<js::Shape*> shape, bool added, bool strict, js::Value *vp); namespace js { bool GetPropertyHelper(JSContext *cx, HandleObject obj, HandleId id, uint32_t getHow, MutableHandleValue vp); inline bool GetPropertyHelper(JSContext *cx, HandleObject obj, PropertyName *name, uint32_t getHow, MutableHandleValue vp)