mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 08:15:31 +00:00
Bug 698495 part 5. Implement getElementIfPresent on nodelist proxies. r=peterv
This commit is contained in:
parent
b1d3ff3b30
commit
fce5566a61
@ -1042,6 +1042,52 @@ ListBase<LC>::get(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, V
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class LC>
|
||||||
|
bool
|
||||||
|
ListBase<LC>::getElementIfPresent(JSContext *cx, JSObject *proxy, JSObject *receiver,
|
||||||
|
uint32 index, Value *vp, bool *present)
|
||||||
|
{
|
||||||
|
if (hasIndexGetter) {
|
||||||
|
IndexGetterType result;
|
||||||
|
*present = getItemAt(getListObject(proxy), index, result);
|
||||||
|
if (*present)
|
||||||
|
return Wrap(cx, proxy, result, vp);
|
||||||
|
|
||||||
|
vp->setUndefined();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
jsid id;
|
||||||
|
if (!JS_IndexToId(cx, index, &id))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
JSObject *expando = getExpandoObject(proxy);
|
||||||
|
if (expando) {
|
||||||
|
JSBool isPresent;
|
||||||
|
if (!JS_GetElementIfPresent(cx, expando, index, expando, vp, &isPresent))
|
||||||
|
return false;
|
||||||
|
if (isPresent) {
|
||||||
|
*present = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// No need to worry about name getters here, so just check the proto.
|
||||||
|
|
||||||
|
JSObject *proto = js::GetObjectProto(proxy);
|
||||||
|
if (proto) {
|
||||||
|
JSBool isPresent;
|
||||||
|
if (!JS_GetElementIfPresent(cx, proto, index, proxy, vp, &isPresent))
|
||||||
|
return false;
|
||||||
|
*present = isPresent;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
*present = false;
|
||||||
|
// Can't Debug_SetValueRangeToCrashOnTouch because it's not public
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
template<class LC>
|
template<class LC>
|
||||||
bool
|
bool
|
||||||
ListBase<LC>::set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, bool strict,
|
ListBase<LC>::set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, bool strict,
|
||||||
|
@ -225,6 +225,8 @@ public:
|
|||||||
bool has(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
|
bool has(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
|
||||||
bool hasOwn(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
|
bool hasOwn(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
|
||||||
bool get(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, js::Value *vp);
|
bool get(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, js::Value *vp);
|
||||||
|
bool getElementIfPresent(JSContext *cx, JSObject *proxy, JSObject *receiver,
|
||||||
|
uint32 index, js::Value *vp, bool *present);
|
||||||
bool set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, bool strict,
|
bool set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, bool strict,
|
||||||
js::Value *vp);
|
js::Value *vp);
|
||||||
bool keys(JSContext *cx, JSObject *proxy, js::AutoIdVector &props);
|
bool keys(JSContext *cx, JSObject *proxy, js::AutoIdVector &props);
|
||||||
|
Loading…
Reference in New Issue
Block a user