author | Peter Van der Beken <peterv@propagandism.org> |
Wed, 27 Mar 2013 18:15:38 +0100 | |
changeset 126558 | 7e13b0fd42f0de1e19d510047e042e22f60d5492 |
parent 126557 | 85bcef2ac1fdba2e8340c0898c91f8ffb4fecbf7 |
child 126559 | 202716eedf730b17e24b3b47bf0d4d10aeb212f3 |
push id | 24488 |
push user | ryanvm@gmail.com |
push date | Fri, 29 Mar 2013 00:54:52 +0000 |
treeherder | mozilla-central@8aeabe064932 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | Waldo |
bugs | 852094 |
milestone | 22.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/jsfriendapi.cpp | file | annotate | diff | comparison | revisions | |
js/src/jsfriendapi.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/jsfriendapi.cpp +++ b/js/src/jsfriendapi.cpp @@ -1032,8 +1032,25 @@ js::AutoCTypesActivityCallback::AutoCTyp MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL) : cx(cx), callback(cx->runtime->ctypesActivityCallback), endType(endType) { MOZ_GUARD_OBJECT_NOTIFIER_INIT; if (callback) callback(cx, beginType); } + +JS_FRIEND_API(JSBool) +js_DefineOwnProperty(JSContext *cx, JSObject *objArg, jsid idArg, + const js::PropertyDescriptor& descriptor, JSBool *bp) +{ + RootedObject obj(cx, objArg); + RootedId id(cx, idArg); + JS_ASSERT(cx->runtime->heapState == js::Idle); + CHECK_REQUEST(cx); + assertSameCompartment(cx, obj, id, descriptor.value); + if (descriptor.attrs & JSPROP_GETTER) + assertSameCompartment(cx, CastAsObjectJsval(descriptor.getter)); + if (descriptor.attrs & JSPROP_SETTER) + assertSameCompartment(cx, CastAsObjectJsval(descriptor.setter)); + + return js_DefineOwnProperty(cx, HandleObject(obj), id, descriptor, bp); +}
--- a/js/src/jsfriendapi.h +++ b/js/src/jsfriendapi.h @@ -1435,9 +1435,13 @@ class JS_FRIEND_API(AutoCTypesActivityCa extern JS_FRIEND_API(void) assertEnteredPolicy(JSContext *cx, JSObject *obj, jsid id); #else inline void assertEnteredPolicy(JSContext *cx, JSObject *obj, jsid id) {}; #endif } /* namespace js */ +extern JS_FRIEND_API(JSBool) +js_DefineOwnProperty(JSContext *cx, JSObject *objArg, jsid idArg, + const js::PropertyDescriptor& descriptor, JSBool *bp); + #endif /* jsfriendapi_h___ */
--- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -987,16 +987,34 @@ js_DefineOwnProperty(JSContext *cx, Hand bool rval; if (!DefineProperty(cx, obj, id, *desc, true, &rval)) return false; *bp = !!rval; return true; } +JSBool +js_DefineOwnProperty(JSContext *cx, HandleObject obj, HandleId id, + const PropertyDescriptor &descriptor, JSBool *bp) +{ + AutoPropDescArrayRooter descs(cx); + PropDesc *desc = descs.append(); + if (!desc) + return false; + + desc->initFromPropertyDescriptor(descriptor); + + bool rval; + if (!DefineProperty(cx, obj, id, *desc, true, &rval)) + return false; + *bp = !!rval; + return true; +} + bool js::ReadPropertyDescriptors(JSContext *cx, HandleObject props, bool checkAccessors, AutoIdVector *ids, AutoPropDescArrayRooter *descs) { if (!GetPropertyNames(cx, props, JSITER_OWNONLY, ids)) return false;
--- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -1151,16 +1151,20 @@ extern js::RawShape js_AddNativeProperty(JSContext *cx, JS::HandleObject obj, JS::HandleId id, JSPropertyOp getter, JSStrictPropertyOp setter, uint32_t slot, unsigned attrs, unsigned flags, int shortid); extern JSBool js_DefineOwnProperty(JSContext *cx, JS::HandleObject obj, JS::HandleId id, const JS::Value &descriptor, JSBool *bp); +extern JSBool +js_DefineOwnProperty(JSContext *cx, JS::HandleObject obj, JS::HandleId id, + const js::PropertyDescriptor &descriptor, JSBool *bp); + namespace js { /* * The NewObjectKind allows an allocation site to specify the type properties * and lifetime requirements that must be fixed at allocation time. */ enum NewObjectKind { /* This is the default. Most objects are generic. */