author | Tooru Fujisawa <arai_a@mac.com> |
Wed, 23 Dec 2015 12:42:13 +0900 | |
changeset 292149 | 35bd15c16547dd563d97e0b1c7ca825ac93d07f2 |
parent 292148 | 1a92f3cced1bd8b5e3279d8610036de53ab8a32b |
child 292150 | 1837056e2ce28c7a5149f60fb2392af9b72abce6 |
push id | 74764 |
push user | arai_a@mac.com |
push date | Thu, 07 Apr 2016 10:49:15 +0000 |
treeherder | mozilla-inbound@4d0f975a2311 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | lth |
bugs | 1165053 |
milestone | 48.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/jsobj.cpp | file | annotate | diff | comparison | revisions | |
js/src/jsobj.h | file | annotate | diff | comparison | revisions |
--- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -2368,16 +2368,49 @@ js::GetPropertyPure(ExclusiveContext* cx if (!shape) { vp->setUndefined(); return true; } return pobj->isNative() && NativeGetPureInline(&pobj->as<NativeObject>(), shape, vp); } +static inline bool +NativeGetGetterPureInline(NativeObject* pobj, Shape* shape, JSFunction** fp) +{ + if (shape->hasGetterObject()) { + if (shape->getterObject()->is<JSFunction>()) { + *fp = &shape->getterObject()->as<JSFunction>(); + return true; + } + } + + *fp = nullptr; + return true; +} + +bool +js::GetGetterPure(ExclusiveContext* cx, JSObject* obj, jsid id, JSFunction** fp) +{ + /* Just like GetPropertyPure, but get getter function, without invoking + * it. */ + JSObject* pobj; + Shape* shape; + if (!LookupPropertyPure(cx, obj, id, &pobj, &shape)) + return false; + + if (!shape) { + *fp = nullptr; + return true; + } + + return pobj->isNative() && + NativeGetGetterPureInline(&pobj->as<NativeObject>(), shape, fp); +} + bool JSObject::reportReadOnly(JSContext* cx, jsid id, unsigned report) { RootedValue val(cx, IdToValue(id)); return ReportValueErrorFlags(cx, report, JSMSG_READ_ONLY, JSDVG_IGNORE_STACK, val, nullptr, nullptr, nullptr); }
--- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -1216,16 +1216,19 @@ FindVariableScope(JSContext* cx, JSFunct bool LookupPropertyPure(ExclusiveContext* cx, JSObject* obj, jsid id, JSObject** objp, Shape** propp); bool GetPropertyPure(ExclusiveContext* cx, JSObject* obj, jsid id, Value* vp); bool +GetGetterPure(ExclusiveContext* cx, JSObject* obj, jsid id, JSFunction** fp); + +bool GetOwnPropertyDescriptor(JSContext* cx, HandleObject obj, HandleId id, MutableHandle<PropertyDescriptor> desc); bool GetOwnPropertyDescriptor(JSContext* cx, HandleObject obj, HandleId id, MutableHandleValue vp); /* * ES6 draft rev 32 (2015 Feb 2) 6.2.4.4 FromPropertyDescriptor(Desc).