зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1072817 - Implement trivial {get,set}PrototypeOf hooks for ScriptedDirectProxyHandler. (r=jorendorff)
This commit is contained in:
Родитель
36db9eff13
Коммит
1015de5f8e
|
@ -0,0 +1,5 @@
|
|||
// |jit-test| error: TypeError
|
||||
var r = Proxy.revocable({}, {});
|
||||
var p = r.proxy;
|
||||
r.revoke();
|
||||
p instanceof Object;
|
|
@ -1090,6 +1090,35 @@ ScriptedDirectProxyHandler::isCallable(JSObject *obj) const
|
|||
return obj->as<ProxyObject>().extra(IS_CALLABLE_EXTRA).toBoolean();
|
||||
}
|
||||
|
||||
// ES6 implements both getPrototypeOf and setPrototypeOf traps. We don't have them yet (see bug
|
||||
// 888969). For now, use these, to account for proxy revocation.
|
||||
bool
|
||||
ScriptedDirectProxyHandler::getPrototypeOf(JSContext *cx, HandleObject proxy,
|
||||
MutableHandleObject protop) const
|
||||
{
|
||||
RootedObject target(cx, proxy->as<ProxyObject>().target());
|
||||
// Though handler is used elsewhere, spec mandates that both get set to null.
|
||||
if (!target) {
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_PROXY_REVOKED);
|
||||
return false;
|
||||
}
|
||||
|
||||
return DirectProxyHandler::getPrototypeOf(cx, proxy, protop);
|
||||
}
|
||||
|
||||
bool
|
||||
ScriptedDirectProxyHandler::setPrototypeOf(JSContext *cx, HandleObject proxy,
|
||||
HandleObject proto, bool *bp) const
|
||||
{
|
||||
RootedObject target(cx, proxy->as<ProxyObject>().target());
|
||||
if (!target) {
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_PROXY_REVOKED);
|
||||
return false;
|
||||
}
|
||||
|
||||
return DirectProxyHandler::setPrototypeOf(cx, proxy, proto, bp);
|
||||
}
|
||||
|
||||
const char ScriptedDirectProxyHandler::family = 0;
|
||||
const ScriptedDirectProxyHandler ScriptedDirectProxyHandler::singleton;
|
||||
|
||||
|
|
|
@ -36,6 +36,11 @@ class ScriptedDirectProxyHandler : public DirectProxyHandler {
|
|||
bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||
// These are standard internal methods, but are not implemented to spec yet.
|
||||
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop)
|
||||
const MOZ_OVERRIDE;
|
||||
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp)
|
||||
const MOZ_OVERRIDE;
|
||||
|
||||
/* SpiderMonkey extensions. */
|
||||
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||
|
|
Загрузка…
Ссылка в новой задаче