зеркало из https://github.com/mozilla/gecko-dev.git
In Proxy get(own)PropertyDescriptor return undefined if property doesn't exist (bug 582967, r=brendan/jorendorff).
This commit is contained in:
Родитель
4dcb309477
Коммит
53bf5744ef
|
@ -377,6 +377,13 @@ ParsePropertyDescriptorObject(JSContext *cx, JSObject *obj, jsid id, const Value
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
IndicatePropertyNotFound(JSContext *cx, PropertyDescriptor *desc)
|
||||
{
|
||||
desc->obj = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
MakePropertyDescriptorObject(JSContext *cx, jsid id, PropertyDescriptor *desc, Value *vp)
|
||||
{
|
||||
|
@ -496,8 +503,9 @@ JSScriptedProxyHandler::getPropertyDescriptor(JSContext *cx, JSObject *proxy, js
|
|||
AutoValueRooter tvr(cx);
|
||||
return GetFundamentalTrap(cx, handler, ATOM(getPropertyDescriptor), tvr.addr()) &&
|
||||
Trap1(cx, handler, tvr.value(), id, tvr.addr()) &&
|
||||
((tvr.value().isUndefined() && IndicatePropertyNotFound(cx, desc)) ||
|
||||
ReturnedValueMustNotBePrimitive(cx, proxy, ATOM(getPropertyDescriptor), tvr.value()) &&
|
||||
ParsePropertyDescriptorObject(cx, proxy, id, tvr.value(), desc);
|
||||
ParsePropertyDescriptorObject(cx, proxy, id, tvr.value(), desc));
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -508,8 +516,9 @@ JSScriptedProxyHandler::getOwnPropertyDescriptor(JSContext *cx, JSObject *proxy,
|
|||
AutoValueRooter tvr(cx);
|
||||
return GetFundamentalTrap(cx, handler, ATOM(getOwnPropertyDescriptor), tvr.addr()) &&
|
||||
Trap1(cx, handler, tvr.value(), id, tvr.addr()) &&
|
||||
((tvr.value().isUndefined() && IndicatePropertyNotFound(cx, desc)) ||
|
||||
ReturnedValueMustNotBePrimitive(cx, proxy, ATOM(getPropertyDescriptor), tvr.value()) &&
|
||||
ParsePropertyDescriptorObject(cx, proxy, id, tvr.value(), desc);
|
||||
ParsePropertyDescriptorObject(cx, proxy, id, tvr.value(), desc));
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
Загрузка…
Ссылка в новой задаче