Bug 1296688 - Add JSCLASS_FOREGROUND_FINALIZE flag r=sfink r=smaug
This commit is contained in:
@@ -414,7 +414,7 @@ class CGDOMJSClass(CGThing):
|
||||
callHook = LEGACYCALLER_HOOK_NAME if self.descriptor.operations["LegacyCaller"] else 'nullptr'
|
||||
objectMovedHook = OBJECT_MOVED_HOOK_NAME if self.descriptor.wrapperCache else 'nullptr'
|
||||
slotCount = INSTANCE_RESERVED_SLOTS + self.descriptor.interface.totalMembersInSlots
|
||||
classFlags = "JSCLASS_IS_DOMJSCLASS | "
|
||||
classFlags = "JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | "
|
||||
if self.descriptor.isGlobal():
|
||||
classFlags += "JSCLASS_DOM_GLOBAL | JSCLASS_GLOBAL_FLAGS_WITH_SLOTS(DOM_GLOBAL_SLOTS)"
|
||||
traceHook = "JS_GlobalObjectTraceHook"
|
||||
|
||||
@@ -81,7 +81,10 @@ static const js::ClassExtension SimpleGlobalClassExtension = {
|
||||
|
||||
const js::Class SimpleGlobalClass = {
|
||||
"",
|
||||
JSCLASS_GLOBAL_FLAGS | JSCLASS_HAS_PRIVATE | JSCLASS_PRIVATE_IS_NSISUPPORTS,
|
||||
JSCLASS_GLOBAL_FLAGS |
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_PRIVATE_IS_NSISUPPORTS |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&SimpleGlobalClassOps,
|
||||
JS_NULL_CLASS_SPEC,
|
||||
&SimpleGlobalClassExtension,
|
||||
|
||||
@@ -255,7 +255,8 @@ const static js::ObjectOps sNPObjectJSWrapperObjectOps = {
|
||||
|
||||
const static js::Class sNPObjectJSWrapperClass = {
|
||||
NPRUNTIME_JSCLASS_NAME,
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sNPObjectJSWrapperClassOps,
|
||||
JS_NULL_CLASS_SPEC,
|
||||
&sNPObjectJSWrapperClassExtension,
|
||||
@@ -293,7 +294,9 @@ static const JSClassOps sNPObjectMemberClassOps = {
|
||||
};
|
||||
|
||||
static const JSClass sNPObjectMemberClass = {
|
||||
"NPObject Ambiguous Member class", JSCLASS_HAS_PRIVATE,
|
||||
"NPObject Ambiguous Member class",
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sNPObjectMemberClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -96,7 +96,9 @@ static const JSClassOps gPrototypeJSClassOps = {
|
||||
|
||||
static const JSClass gPrototypeJSClass = {
|
||||
"XBL prototype JSClass",
|
||||
JSCLASS_HAS_PRIVATE | JSCLASS_PRIVATE_IS_NSISUPPORTS |
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_PRIVATE_IS_NSISUPPORTS |
|
||||
JSCLASS_FOREGROUND_FINALIZE |
|
||||
// Our one reserved slot holds the relevant nsXBLPrototypeBinding
|
||||
JSCLASS_HAS_RESERVED_SLOTS(1),
|
||||
&gPrototypeJSClassOps
|
||||
|
||||
@@ -767,6 +767,7 @@ struct JSClass {
|
||||
#define JSCLASS_USERBIT3 (1<<(JSCLASS_HIGH_FLAGS_SHIFT+7))
|
||||
|
||||
#define JSCLASS_BACKGROUND_FINALIZE (1<<(JSCLASS_HIGH_FLAGS_SHIFT+8))
|
||||
#define JSCLASS_FOREGROUND_FINALIZE (1<<(JSCLASS_HIGH_FLAGS_SHIFT+9))
|
||||
|
||||
// Bits 26 through 31 are reserved for the CACHED_PROTO_KEY mechanism, see
|
||||
// below.
|
||||
|
||||
@@ -354,7 +354,8 @@ const Class WasmModuleObject::class_ =
|
||||
{
|
||||
"WebAssembly.Module",
|
||||
JSCLASS_DELAY_METADATA_BUILDER |
|
||||
JSCLASS_HAS_RESERVED_SLOTS(WasmModuleObject::RESERVED_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(WasmModuleObject::RESERVED_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&WasmModuleObject::classOps_,
|
||||
};
|
||||
|
||||
@@ -487,7 +488,8 @@ const Class WasmInstanceObject::class_ =
|
||||
{
|
||||
"WebAssembly.Instance",
|
||||
JSCLASS_DELAY_METADATA_BUILDER |
|
||||
JSCLASS_HAS_RESERVED_SLOTS(WasmInstanceObject::RESERVED_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(WasmInstanceObject::RESERVED_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&WasmInstanceObject::classOps_,
|
||||
};
|
||||
|
||||
@@ -833,7 +835,8 @@ const Class WasmTableObject::class_ =
|
||||
{
|
||||
"WebAssembly.Table",
|
||||
JSCLASS_DELAY_METADATA_BUILDER |
|
||||
JSCLASS_HAS_RESERVED_SLOTS(WasmTableObject::RESERVED_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(WasmTableObject::RESERVED_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&WasmTableObject::classOps_
|
||||
};
|
||||
|
||||
|
||||
@@ -658,7 +658,8 @@ static const ClassOps CollatorClassOps = {
|
||||
|
||||
static const Class CollatorClass = {
|
||||
js_Object_str,
|
||||
JSCLASS_HAS_RESERVED_SLOTS(COLLATOR_SLOTS_COUNT),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(COLLATOR_SLOTS_COUNT) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&CollatorClassOps
|
||||
};
|
||||
|
||||
@@ -1147,7 +1148,8 @@ static const ClassOps NumberFormatClassOps = {
|
||||
|
||||
static const Class NumberFormatClass = {
|
||||
js_Object_str,
|
||||
JSCLASS_HAS_RESERVED_SLOTS(NUMBER_FORMAT_SLOTS_COUNT),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(NUMBER_FORMAT_SLOTS_COUNT) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&NumberFormatClassOps
|
||||
};
|
||||
|
||||
@@ -1611,7 +1613,8 @@ static const ClassOps DateTimeFormatClassOps = {
|
||||
|
||||
static const Class DateTimeFormatClass = {
|
||||
js_Object_str,
|
||||
JSCLASS_HAS_RESERVED_SLOTS(DATE_TIME_FORMAT_SLOTS_COUNT),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(DATE_TIME_FORMAT_SLOTS_COUNT) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&DateTimeFormatClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -117,7 +117,8 @@ static const ClassOps MapIteratorObjectClassOps = {
|
||||
|
||||
const Class MapIteratorObject::class_ = {
|
||||
"Map Iterator",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(MapIteratorObject::SlotCount),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(MapIteratorObject::SlotCount) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&MapIteratorObjectClassOps
|
||||
};
|
||||
|
||||
@@ -269,7 +270,8 @@ const ClassOps MapObject::classOps_ = {
|
||||
const Class MapObject::class_ = {
|
||||
"Map",
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_Map),
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_Map) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&MapObject::classOps_
|
||||
};
|
||||
|
||||
@@ -856,7 +858,8 @@ static const ClassOps SetIteratorObjectClassOps = {
|
||||
|
||||
const Class SetIteratorObject::class_ = {
|
||||
"Set Iterator",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(SetIteratorObject::SlotCount),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(SetIteratorObject::SlotCount) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&SetIteratorObjectClassOps
|
||||
};
|
||||
|
||||
@@ -1001,7 +1004,8 @@ const ClassOps SetObject::classOps_ = {
|
||||
const Class SetObject::class_ = {
|
||||
"Set",
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_Set),
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_Set) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&SetObject::classOps_
|
||||
};
|
||||
|
||||
|
||||
@@ -564,7 +564,8 @@ ModuleObject::classOps_ = {
|
||||
ModuleObject::class_ = {
|
||||
"Module",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(ModuleObject::SlotCount) |
|
||||
JSCLASS_IS_ANONYMOUS,
|
||||
JSCLASS_IS_ANONYMOUS |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&ModuleObject::classOps_
|
||||
};
|
||||
|
||||
|
||||
@@ -1508,7 +1508,9 @@ static const JSClassOps FinalizeCounterClassOps = {
|
||||
};
|
||||
|
||||
static const JSClass FinalizeCounterClass = {
|
||||
"FinalizeCounter", JSCLASS_IS_ANONYMOUS,
|
||||
"FinalizeCounter",
|
||||
JSCLASS_IS_ANONYMOUS |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&FinalizeCounterClassOps
|
||||
};
|
||||
|
||||
@@ -2192,7 +2194,9 @@ static const ClassOps CloneBufferObjectClassOps = {
|
||||
};
|
||||
|
||||
const Class CloneBufferObject::class_ = {
|
||||
"CloneBuffer", JSCLASS_HAS_RESERVED_SLOTS(CloneBufferObject::NUM_SLOTS),
|
||||
"CloneBuffer",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(CloneBufferObject::NUM_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&CloneBufferObjectClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -399,7 +399,8 @@ static const ClassOps WeakMapObjectClassOps = {
|
||||
const Class WeakMapObject::class_ = {
|
||||
"WeakMap",
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_WeakMap),
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_WeakMap) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&WeakMapObjectClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -573,7 +573,8 @@ static const JSClassOps sCTypeClassOps = {
|
||||
};
|
||||
static const JSClass sCTypeClass = {
|
||||
"CType",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(CTYPE_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(CTYPE_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sCTypeClassOps
|
||||
};
|
||||
|
||||
@@ -584,7 +585,8 @@ static const JSClassOps sCDataClassOps = {
|
||||
};
|
||||
static const JSClass sCDataClass = {
|
||||
"CData",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(CDATA_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(CDATA_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sCDataClassOps
|
||||
};
|
||||
|
||||
@@ -595,7 +597,8 @@ static const JSClassOps sCClosureClassOps = {
|
||||
};
|
||||
static const JSClass sCClosureClass = {
|
||||
"CClosure",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(CCLOSURE_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(CCLOSURE_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sCClosureClassOps
|
||||
};
|
||||
|
||||
@@ -619,7 +622,9 @@ static const JSClassOps sCDataFinalizerClassOps = {
|
||||
};
|
||||
static const JSClass sCDataFinalizerClass = {
|
||||
"CDataFinalizer",
|
||||
JSCLASS_HAS_PRIVATE | JSCLASS_HAS_RESERVED_SLOTS(CDATAFINALIZER_SLOTS),
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_HAS_RESERVED_SLOTS(CDATAFINALIZER_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sCDataFinalizerClassOps
|
||||
};
|
||||
|
||||
@@ -809,13 +814,15 @@ static const JSClassOps sInt64ClassOps = {
|
||||
|
||||
static const JSClass sInt64Class = {
|
||||
"Int64",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(INT64_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(INT64_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sInt64ClassOps
|
||||
};
|
||||
|
||||
static const JSClass sUInt64Class = {
|
||||
"UInt64",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(INT64_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(INT64_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sInt64ClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -39,7 +39,8 @@ static const JSClassOps sLibraryClassOps = {
|
||||
|
||||
static const JSClass sLibraryClass = {
|
||||
"Library",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(LIBRARY_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(LIBRARY_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sLibraryClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ static const JSClassOps BarkWhenTracedClassClassOps = {
|
||||
|
||||
const JSClass BarkWhenTracedClass::class_ = {
|
||||
"BarkWhenTracedClass",
|
||||
0,
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&BarkWhenTracedClassClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -84,7 +84,8 @@ static const ClassOps ErrorObjectClassOps = {
|
||||
{ \
|
||||
js_Error_str, /* yes, really */ \
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_##name) | \
|
||||
JSCLASS_HAS_RESERVED_SLOTS(ErrorObject::RESERVED_SLOTS), \
|
||||
JSCLASS_HAS_RESERVED_SLOTS(ErrorObject::RESERVED_SLOTS) | \
|
||||
JSCLASS_FOREGROUND_FINALIZE, \
|
||||
&ErrorObjectClassOps, \
|
||||
classSpecPtr \
|
||||
}
|
||||
|
||||
@@ -323,35 +323,50 @@ SetNewObjectMetadata(ExclusiveContext* cxArg, JSObject* obj)
|
||||
JSObject::create(js::ExclusiveContext* cx, js::gc::AllocKind kind, js::gc::InitialHeap heap,
|
||||
js::HandleShape shape, js::HandleObjectGroup group)
|
||||
{
|
||||
const js::Class* clasp = group->clasp();
|
||||
|
||||
MOZ_ASSERT(shape && group);
|
||||
MOZ_ASSERT(group->clasp() == shape->getObjectClass());
|
||||
MOZ_ASSERT(group->clasp() != &js::ArrayObject::class_);
|
||||
MOZ_ASSERT_IF(!js::ClassCanHaveFixedData(group->clasp()),
|
||||
js::gc::GetGCKindSlots(kind, group->clasp()) == shape->numFixedSlots());
|
||||
MOZ_ASSERT_IF(group->clasp()->flags & JSCLASS_BACKGROUND_FINALIZE,
|
||||
IsBackgroundFinalized(kind));
|
||||
MOZ_ASSERT_IF(group->clasp()->hasFinalize(),
|
||||
heap == js::gc::TenuredHeap ||
|
||||
(group->clasp()->flags & JSCLASS_SKIP_NURSERY_FINALIZE));
|
||||
MOZ_ASSERT_IF(group->hasUnanalyzedPreliminaryObjects(),
|
||||
heap == js::gc::TenuredHeap);
|
||||
MOZ_ASSERT(clasp == shape->getObjectClass());
|
||||
MOZ_ASSERT(clasp != &js::ArrayObject::class_);
|
||||
MOZ_ASSERT_IF(!js::ClassCanHaveFixedData(clasp),
|
||||
js::gc::GetGCKindSlots(kind, clasp) == shape->numFixedSlots());
|
||||
|
||||
#ifdef DEBUG
|
||||
static const uint32_t FinalizeMask = JSCLASS_FOREGROUND_FINALIZE | JSCLASS_BACKGROUND_FINALIZE;
|
||||
uint32_t flags = clasp->flags;
|
||||
uint32_t finalizeFlags = flags & FinalizeMask;
|
||||
|
||||
// Classes with a finalizer must specify whether instances will be finalized
|
||||
// on the main thread or in the background, except proxies whose behaviour
|
||||
// depends on the target object.
|
||||
if (clasp->hasFinalize() && !clasp->isProxy()) {
|
||||
MOZ_ASSERT(finalizeFlags == JSCLASS_FOREGROUND_FINALIZE ||
|
||||
finalizeFlags == JSCLASS_BACKGROUND_FINALIZE);
|
||||
MOZ_ASSERT((finalizeFlags == JSCLASS_BACKGROUND_FINALIZE) == IsBackgroundFinalized(kind));
|
||||
} else {
|
||||
MOZ_ASSERT(finalizeFlags == 0);
|
||||
}
|
||||
|
||||
MOZ_ASSERT_IF(clasp->hasFinalize(), heap == js::gc::TenuredHeap ||
|
||||
(flags & JSCLASS_SKIP_NURSERY_FINALIZE));
|
||||
MOZ_ASSERT_IF(group->hasUnanalyzedPreliminaryObjects(), heap == js::gc::TenuredHeap);
|
||||
#endif
|
||||
|
||||
MOZ_ASSERT(!cx->compartment()->hasObjectPendingMetadata());
|
||||
|
||||
// Non-native classes cannot have reserved slots or private data, and the
|
||||
// objects can't have any fixed slots, for compatibility with
|
||||
// GetReservedOrProxyPrivateSlot.
|
||||
MOZ_ASSERT_IF(!group->clasp()->isNative(), JSCLASS_RESERVED_SLOTS(group->clasp()) == 0);
|
||||
MOZ_ASSERT_IF(!group->clasp()->isNative(), !group->clasp()->hasPrivate());
|
||||
MOZ_ASSERT_IF(!group->clasp()->isNative(), shape->numFixedSlots() == 0);
|
||||
MOZ_ASSERT_IF(!group->clasp()->isNative(), shape->slotSpan() == 0);
|
||||
|
||||
const js::Class* clasp = group->clasp();
|
||||
MOZ_ASSERT_IF(!clasp->isNative(), JSCLASS_RESERVED_SLOTS(clasp) == 0);
|
||||
MOZ_ASSERT_IF(!clasp->isNative(), !clasp->hasPrivate());
|
||||
MOZ_ASSERT_IF(!clasp->isNative(), shape->numFixedSlots() == 0);
|
||||
MOZ_ASSERT_IF(!clasp->isNative(), shape->slotSpan() == 0);
|
||||
|
||||
size_t nDynamicSlots = 0;
|
||||
if (group->clasp()->isNative()) {
|
||||
if (clasp->isNative()) {
|
||||
nDynamicSlots = js::NativeObject::dynamicSlotsCount(shape->numFixedSlots(),
|
||||
shape->slotSpan(), clasp);
|
||||
} else if (group->clasp()->isProxy()) {
|
||||
} else if (clasp->isProxy()) {
|
||||
// Proxy objects overlay the |slots| field with a ProxyValueArray.
|
||||
MOZ_ASSERT(sizeof(js::detail::ProxyValueArray) % sizeof(js::HeapSlot) == 0);
|
||||
nDynamicSlots = sizeof(js::detail::ProxyValueArray) / sizeof(js::HeapSlot);
|
||||
@@ -380,7 +395,7 @@ JSObject::create(js::ExclusiveContext* cx, js::gc::AllocKind kind, js::gc::Initi
|
||||
obj->as<js::NativeObject>().initializeSlotRange(0, span);
|
||||
|
||||
// JSFunction's fixed slots expect POD-style initialization.
|
||||
if (group->clasp()->isJSFunction()) {
|
||||
if (clasp->isJSFunction()) {
|
||||
MOZ_ASSERT(kind == js::gc::AllocKind::FUNCTION ||
|
||||
kind == js::gc::AllocKind::FUNCTION_EXTENDED);
|
||||
size_t size =
|
||||
@@ -393,7 +408,7 @@ JSObject::create(js::ExclusiveContext* cx, js::gc::AllocKind kind, js::gc::Initi
|
||||
}
|
||||
}
|
||||
|
||||
if (group->clasp()->shouldDelayMetadataBuilder())
|
||||
if (clasp->shouldDelayMetadataBuilder())
|
||||
cx->compartment()->setObjectPendingMetadata(cx, obj);
|
||||
else
|
||||
obj = SetNewObjectMetadata(cx, obj);
|
||||
|
||||
@@ -1649,7 +1649,8 @@ static const ClassOps ScriptSourceObjectClassOps = {
|
||||
const Class ScriptSourceObject::class_ = {
|
||||
"ScriptSource",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(RESERVED_SLOTS) |
|
||||
JSCLASS_IS_ANONYMOUS,
|
||||
JSCLASS_IS_ANONYMOUS |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&ScriptSourceObjectClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -172,7 +172,8 @@ static const JSClassOps pm_classOps = {
|
||||
|
||||
static const JSClass pm_class = {
|
||||
"PerfMeasurement",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&pm_classOps
|
||||
};
|
||||
|
||||
|
||||
@@ -412,7 +412,8 @@ static const js::ClassOps FileObjectClassOps = {
|
||||
|
||||
const js::Class FileObject::class_ = {
|
||||
"File",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(FileObject::NUM_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(FileObject::NUM_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&FileObjectClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -94,7 +94,9 @@ const ClassOps DebuggerFrame::classOps_ = {
|
||||
|
||||
const Class DebuggerFrame::class_ = {
|
||||
"Frame",
|
||||
JSCLASS_HAS_PRIVATE | JSCLASS_HAS_RESERVED_SLOTS(JSSLOT_DEBUGFRAME_COUNT),
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_HAS_RESERVED_SLOTS(JSSLOT_DEBUGFRAME_COUNT) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&DebuggerFrame::classOps_
|
||||
};
|
||||
|
||||
@@ -3127,7 +3129,8 @@ const ClassOps Debugger::classOps_ = {
|
||||
const Class Debugger::class_ = {
|
||||
"Debugger",
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_HAS_RESERVED_SLOTS(JSSLOT_DEBUG_COUNT),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(JSSLOT_DEBUG_COUNT) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&Debugger::classOps_
|
||||
};
|
||||
|
||||
|
||||
@@ -663,7 +663,9 @@ GlobalDebuggees_classOps = {
|
||||
|
||||
static const Class
|
||||
GlobalDebuggees_class = {
|
||||
"GlobalDebuggee", JSCLASS_HAS_PRIVATE,
|
||||
"GlobalDebuggee",
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&GlobalDebuggees_classOps
|
||||
};
|
||||
|
||||
|
||||
@@ -297,7 +297,9 @@ static const ClassOps ForOfPICClassOps = {
|
||||
};
|
||||
|
||||
const Class ForOfPIC::class_ = {
|
||||
"ForOfPIC", JSCLASS_HAS_PRIVATE,
|
||||
"ForOfPIC",
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&ForOfPICClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -51,7 +51,8 @@ static const ClassOps RegExpStaticsObjectClassOps = {
|
||||
|
||||
const Class RegExpStaticsObject::class_ = {
|
||||
"RegExpStatics",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&RegExpStaticsObjectClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -334,7 +334,8 @@ const ClassSpec SavedFrame::classSpec_ = {
|
||||
JSCLASS_HAS_PRIVATE |
|
||||
JSCLASS_HAS_RESERVED_SLOTS(SavedFrame::JSSLOT_COUNT) |
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_SavedFrame) |
|
||||
JSCLASS_IS_ANONYMOUS,
|
||||
JSCLASS_IS_ANONYMOUS |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&SavedFrameClassOps,
|
||||
&SavedFrame::classSpec_
|
||||
};
|
||||
|
||||
@@ -351,7 +351,8 @@ const Class SharedArrayBufferObject::class_ = {
|
||||
"SharedArrayBuffer",
|
||||
JSCLASS_DELAY_METADATA_BUILDER |
|
||||
JSCLASS_HAS_RESERVED_SLOTS(SharedArrayBufferObject::RESERVED_SLOTS) |
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_SharedArrayBuffer),
|
||||
JSCLASS_HAS_CACHED_PROTO(JSProto_SharedArrayBuffer) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&SharedArrayBufferObjectClassOps,
|
||||
JS_NULL_CLASS_SPEC,
|
||||
JS_NULL_CLASS_EXT
|
||||
|
||||
@@ -554,7 +554,8 @@ static const js::ClassExtension SandboxClassExtension = {
|
||||
|
||||
static const js::Class SandboxClass = {
|
||||
"Sandbox",
|
||||
XPCONNECT_GLOBAL_FLAGS_WITH_EXTRA_SLOTS(1),
|
||||
XPCONNECT_GLOBAL_FLAGS_WITH_EXTRA_SLOTS(1) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&SandboxClassOps,
|
||||
JS_NULL_CLASS_SPEC,
|
||||
&SandboxClassExtension,
|
||||
@@ -573,7 +574,8 @@ static const js::ClassOps SandboxWriteToProtoClassOps = {
|
||||
|
||||
static const js::Class SandboxWriteToProtoClass = {
|
||||
"Sandbox",
|
||||
XPCONNECT_GLOBAL_FLAGS_WITH_EXTRA_SLOTS(1),
|
||||
XPCONNECT_GLOBAL_FLAGS_WITH_EXTRA_SLOTS(1) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&SandboxWriteToProtoClassOps,
|
||||
JS_NULL_CLASS_SPEC,
|
||||
&SandboxClassExtension,
|
||||
|
||||
@@ -1387,30 +1387,10 @@ nsXPCWrappedJSClass::GetInterfaceName()
|
||||
return mName;
|
||||
}
|
||||
|
||||
static void
|
||||
FinalizeStub(JSFreeOp* fop, JSObject* obj)
|
||||
{
|
||||
}
|
||||
|
||||
static const JSClassOps XPCOutParamClassOps = {
|
||||
nullptr, /* addProperty */
|
||||
nullptr, /* delProperty */
|
||||
nullptr, /* getProperty */
|
||||
nullptr, /* setProperty */
|
||||
nullptr, /* enumerate */
|
||||
nullptr, /* resolve */
|
||||
nullptr, /* mayResolve */
|
||||
FinalizeStub,
|
||||
nullptr, /* call */
|
||||
nullptr, /* hasInstance */
|
||||
nullptr, /* construct */
|
||||
nullptr /* trace */
|
||||
};
|
||||
|
||||
static const JSClass XPCOutParamClass = {
|
||||
"XPCOutParam",
|
||||
0,
|
||||
&XPCOutParamClassOps
|
||||
JS_NULL_CLASS_OPS
|
||||
};
|
||||
|
||||
bool
|
||||
|
||||
@@ -645,7 +645,8 @@ const js::Class XPC_WN_NoHelper_JSClass = {
|
||||
"XPCWrappedNative_NoHelper",
|
||||
WRAPPER_FLAGS |
|
||||
JSCLASS_IS_WRAPPED_NATIVE |
|
||||
JSCLASS_PRIVATE_IS_NSISUPPORTS,
|
||||
JSCLASS_PRIVATE_IS_NSISUPPORTS |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&XPC_WN_NoHelper_JSClassOps,
|
||||
JS_NULL_CLASS_SPEC,
|
||||
&XPC_WN_JSClassExtension,
|
||||
|
||||
@@ -209,7 +209,7 @@ extern const char XPC_XPCONNECT_CONTRACTID[];
|
||||
return (result || !src) ? NS_OK : NS_ERROR_OUT_OF_MEMORY
|
||||
|
||||
|
||||
#define WRAPPER_FLAGS JSCLASS_HAS_PRIVATE
|
||||
#define WRAPPER_FLAGS (JSCLASS_HAS_PRIVATE | JSCLASS_FOREGROUND_FINALIZE)
|
||||
|
||||
// If IS_WN_CLASS for the JSClass of an object is true, the object is a
|
||||
// wrappednative wrapper, holding the XPCWrappedNative in its private slot.
|
||||
|
||||
@@ -1062,7 +1062,8 @@ static const JSClassOps ExpandoObjectClassOps = {
|
||||
|
||||
const JSClass ExpandoObjectClass = {
|
||||
"XrayExpandoObject",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(JSSLOT_EXPANDO_COUNT),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(JSSLOT_EXPANDO_COUNT) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&ExpandoObjectClassOps
|
||||
};
|
||||
|
||||
|
||||
@@ -129,7 +129,8 @@ static const JSClassOps sWitnessClassOps = {
|
||||
|
||||
static const JSClass sWitnessClass = {
|
||||
"FinalizationWitness",
|
||||
JSCLASS_HAS_RESERVED_SLOTS(WITNESS_INSTANCES_SLOTS),
|
||||
JSCLASS_HAS_RESERVED_SLOTS(WITNESS_INSTANCES_SLOTS) |
|
||||
JSCLASS_FOREGROUND_FINALIZE,
|
||||
&sWitnessClassOps
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user