mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 08:15:31 +00:00
Bug 1595745 - Part 7: Change Atomics to use ClassSpec. r=mgaudet
Similar changes like in part 5, only now for the Atomics object. Differential Revision: https://phabricator.services.mozilla.com/D52663 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
563f03bb43
commit
4acd45cff3
@ -108,7 +108,7 @@
|
||||
REAL(WeakSet, InitViaClassSpec, OCLASP(WeakSet)) \
|
||||
REAL(TypedArray, InitViaClassSpec, \
|
||||
&js::TypedArrayObject::sharedTypedArrayPrototypeClass) \
|
||||
REAL(Atomics, InitAtomicsClass, OCLASP(Atomics)) \
|
||||
REAL(Atomics, InitViaClassSpec, OCLASP(Atomics)) \
|
||||
REAL(SavedFrame, InitViaClassSpec, &js::SavedFrame::class_) \
|
||||
REAL(Promise, InitViaClassSpec, OCLASP(Promise)) \
|
||||
REAL(AsyncFunction, InitAsyncFunction, nullptr) \
|
||||
|
@ -72,9 +72,6 @@
|
||||
|
||||
using namespace js;
|
||||
|
||||
const JSClass AtomicsObject::class_ = {
|
||||
"Atomics", JSCLASS_HAS_CACHED_PROTO(JSProto_Atomics)};
|
||||
|
||||
static bool ReportBadArrayType(JSContext* cx) {
|
||||
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,
|
||||
JSMSG_ATOMICS_BAD_ARRAY);
|
||||
@ -957,42 +954,25 @@ const JSFunctionSpec AtomicsMethods[] = {
|
||||
JS_FN("wake", atomics_notify, 3, 0), // Legacy name
|
||||
JS_FS_END};
|
||||
|
||||
JSObject* AtomicsObject::initClass(JSContext* cx,
|
||||
Handle<GlobalObject*> global) {
|
||||
// Create Atomics Object.
|
||||
RootedObject objProto(cx,
|
||||
GlobalObject::getOrCreateObjectPrototype(cx, global));
|
||||
if (!objProto) {
|
||||
return nullptr;
|
||||
}
|
||||
RootedObject Atomics(cx, NewObjectWithGivenProto(cx, &AtomicsObject::class_,
|
||||
objProto, SingletonObject));
|
||||
if (!Atomics) {
|
||||
return nullptr;
|
||||
}
|
||||
static const JSPropertySpec AtomicsProperties[] = {
|
||||
JS_STRING_SYM_PS(toStringTag, "Atomics", JSPROP_READONLY), JS_PS_END};
|
||||
|
||||
if (!JS_DefineFunctions(cx, Atomics, AtomicsMethods)) {
|
||||
static JSObject* CreateAtomicsObject(JSContext* cx, JSProtoKey key) {
|
||||
Handle<GlobalObject*> global = cx->global();
|
||||
RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
|
||||
if (!proto) {
|
||||
return nullptr;
|
||||
}
|
||||
if (!DefineToStringTag(cx, Atomics, cx->names().Atomics)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RootedValue AtomicsValue(cx, ObjectValue(*Atomics));
|
||||
|
||||
// Everything is set up, install Atomics on the global object.
|
||||
if (!DefineDataProperty(cx, global, cx->names().Atomics, AtomicsValue,
|
||||
JSPROP_RESOLVING)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
global->setConstructor(JSProto_Atomics, AtomicsValue);
|
||||
return Atomics;
|
||||
return NewObjectWithGivenProto(cx, &AtomicsObject::class_, proto,
|
||||
SingletonObject);
|
||||
}
|
||||
|
||||
JSObject* js::InitAtomicsClass(JSContext* cx, Handle<GlobalObject*> global) {
|
||||
return AtomicsObject::initClass(cx, global);
|
||||
}
|
||||
static const ClassSpec AtomicsClassSpec = {CreateAtomicsObject, nullptr,
|
||||
AtomicsMethods, AtomicsProperties};
|
||||
|
||||
const JSClass AtomicsObject::class_ = {
|
||||
"Atomics", JSCLASS_HAS_CACHED_PROTO(JSProto_Atomics), JS_NULL_CLASS_OPS,
|
||||
&AtomicsClassSpec};
|
||||
|
||||
#undef CXX11_ATOMICS
|
||||
#undef GNU_ATOMICS
|
||||
|
@ -18,15 +18,11 @@
|
||||
|
||||
namespace js {
|
||||
|
||||
class GlobalObject;
|
||||
class SharedArrayRawBuffer;
|
||||
|
||||
class AtomicsObject : public NativeObject {
|
||||
public:
|
||||
static const JSClass class_;
|
||||
static JSObject* initClass(JSContext* cx, Handle<GlobalObject*> global);
|
||||
static MOZ_MUST_USE bool toString(JSContext* cx, unsigned int argc,
|
||||
Value* vp);
|
||||
};
|
||||
|
||||
MOZ_MUST_USE bool atomics_compareExchange(JSContext* cx, unsigned argc,
|
||||
@ -141,8 +137,6 @@ class FutexThread {
|
||||
ThreadData<bool> canWait_;
|
||||
};
|
||||
|
||||
JSObject* InitAtomicsClass(JSContext* cx, Handle<GlobalObject*> global);
|
||||
|
||||
// Go to sleep if the int32_t value at the given address equals `value`.
|
||||
MOZ_MUST_USE FutexThread::WaitResult atomics_wait_impl(
|
||||
JSContext* cx, SharedArrayRawBuffer* sarb, uint32_t byteOffset,
|
||||
|
Loading…
Reference in New Issue
Block a user