Use ordinary objects for Error prototypes

This commit is contained in:
janekptacijarabaci 2018-03-17 16:56:31 +01:00 • committed by Roy Tam
commit 105cbadae7
4 changed files with 161 additions and 91 deletions

View file

@ -427,6 +427,18 @@ class GlobalObject : public NativeObject
return &global->getPrototype(key).toObject();
}
static JSFunction*
getOrCreateErrorConstructor(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_Error))
return nullptr;
return &global->getConstructor(JSProto_Error).toObject().as<JSFunction>();
}
static JSObject*
getOrCreateErrorPrototype(JSContext* cx, Handle<GlobalObject*> global) {
return getOrCreateCustomErrorPrototype(cx, global, JSEXN_ERR);
}
static NativeObject* getOrCreateSetPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_Set))
return nullptr;
@ -1003,10 +1015,7 @@ GenericCreatePrototype(JSContext* cx, JSProtoKey key)
inline JSProtoKey
StandardProtoKeyOrNull(const JSObject* obj)
{
JSProtoKey key = JSCLASS_CACHED_PROTO_KEY(obj->getClass());
if (key == JSProto_Error)
return GetExceptionProtoKey(obj->as<ErrorObject>().type());
return key;
return JSCLASS_CACHED_PROTO_KEY(obj->getClass());
}
JSObject*