diff --git a/js/src/asmjs/WasmModule.cpp b/js/src/asmjs/WasmModule.cpp index 81715b1c4f9b..d4ab18e145fd 100644 --- a/js/src/asmjs/WasmModule.cpp +++ b/js/src/asmjs/WasmModule.cpp @@ -908,13 +908,10 @@ Module::~Module() /* virtual */ void Module::trace(JSTracer* trc) { - for (const Import& import : imports()) { - if (importToExit(import).fun) - TraceEdge(trc, &importToExit(import).fun, "wasm function import"); - } + for (const Import& import : imports()) + TraceNullableEdge(trc, &importToExit(import).fun, "wasm function import"); - if (heap_) - TraceEdge(trc, &heap_, "wasm buffer"); + TraceNullableEdge(trc, &heap_, "wasm buffer"); MOZ_ASSERT(ownerObject_); TraceEdge(trc, &ownerObject_, "wasm owner object"); diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp index 07d9b2bf699b..edc8214b7906 100644 --- a/js/src/builtin/TypedObject.cpp +++ b/js/src/builtin/TypedObject.cpp @@ -2943,16 +2943,14 @@ MemoryTracingVisitor::visitReference(ReferenceTypeDescr& descr, uint8_t* mem) case ReferenceTypeDescr::TYPE_OBJECT: { HeapPtrObject* objectPtr = reinterpret_cast(mem); - if (*objectPtr) - TraceEdge(trace_, objectPtr, "reference-obj"); + TraceNullableEdge(trace_, objectPtr, "reference-obj"); return; } case ReferenceTypeDescr::TYPE_STRING: { HeapPtrString* stringPtr = reinterpret_cast(mem); - if (*stringPtr) - TraceEdge(trace_, stringPtr, "reference-str"); + TraceNullableEdge(trace_, stringPtr, "reference-str"); return; } } diff --git a/js/src/jit/BaselineIC.h b/js/src/jit/BaselineIC.h index 76a6c2989408..09d25ac9c0c3 100644 --- a/js/src/jit/BaselineIC.h +++ b/js/src/jit/BaselineIC.h @@ -1284,10 +1284,8 @@ class ICSetElem_DenseOrUnboxedArrayAddImpl : public ICSetElem_DenseOrUnboxedArra public: void traceShapes(JSTracer* trc) { - for (size_t i = 0; i < NumShapes; i++) { - if (shapes_[i]) - TraceEdge(trc, &shapes_[i], "baseline-setelem-denseadd-stub-shape"); - } + for (size_t i = 0; i < NumShapes; i++) + TraceNullableEdge(trc, &shapes_[i], "baseline-setelem-denseadd-stub-shape"); } Shape* shape(size_t i) const { MOZ_ASSERT(i < NumShapes); diff --git a/js/src/jit/BaselineJIT.cpp b/js/src/jit/BaselineJIT.cpp index 7d8069b0c990..d16533fc4390 100644 --- a/js/src/jit/BaselineJIT.cpp +++ b/js/src/jit/BaselineJIT.cpp @@ -456,8 +456,7 @@ void BaselineScript::trace(JSTracer* trc) { TraceEdge(trc, &method_, "baseline-method"); - if (templateScope_) - TraceEdge(trc, &templateScope_, "baseline-template-scope"); + TraceNullableEdge(trc, &templateScope_, "baseline-template-scope"); // Mark all IC stub codes hanging off the IC stub entries. for (size_t i = 0; i < numICEntries(); i++) { diff --git a/js/src/jit/SharedIC.cpp b/js/src/jit/SharedIC.cpp index 288badbfa5e6..4116430feb58 100644 --- a/js/src/jit/SharedIC.cpp +++ b/js/src/jit/SharedIC.cpp @@ -187,21 +187,18 @@ ICStub::trace(JSTracer* trc) case ICStub::Call_Scripted: { ICCall_Scripted* callStub = toCall_Scripted(); TraceEdge(trc, &callStub->callee(), "baseline-callscripted-callee"); - if (callStub->templateObject()) - TraceEdge(trc, &callStub->templateObject(), "baseline-callscripted-template"); + TraceNullableEdge(trc, &callStub->templateObject(), "baseline-callscripted-template"); break; } case ICStub::Call_Native: { ICCall_Native* callStub = toCall_Native(); TraceEdge(trc, &callStub->callee(), "baseline-callnative-callee"); - if (callStub->templateObject()) - TraceEdge(trc, &callStub->templateObject(), "baseline-callnative-template"); + TraceNullableEdge(trc, &callStub->templateObject(), "baseline-callnative-template"); break; } case ICStub::Call_ClassHook: { ICCall_ClassHook* callStub = toCall_ClassHook(); - if (callStub->templateObject()) - TraceEdge(trc, &callStub->templateObject(), "baseline-callclasshook-template"); + TraceNullableEdge(trc, &callStub->templateObject(), "baseline-callclasshook-template"); break; } case ICStub::Call_StringSplit: { @@ -285,8 +282,7 @@ ICStub::trace(JSTracer* trc) } case ICStub::SetElem_DenseOrUnboxedArray: { ICSetElem_DenseOrUnboxedArray* setElemStub = toSetElem_DenseOrUnboxedArray(); - if (setElemStub->shape()) - TraceEdge(trc, &setElemStub->shape(), "baseline-getelem-dense-shape"); + TraceNullableEdge(trc, &setElemStub->shape(), "baseline-getelem-dense-shape"); TraceEdge(trc, &setElemStub->group(), "baseline-setelem-dense-group"); break; } @@ -425,10 +421,8 @@ ICStub::trace(JSTracer* trc) else propStub = toGetProp_CallDOMProxyWithGenerationNative(); propStub->receiverGuard().trace(trc); - if (propStub->expandoShape()) { - TraceEdge(trc, &propStub->expandoShape(), - "baseline-getproplistbasenative-stub-expandoshape"); - } + TraceNullableEdge(trc, &propStub->expandoShape(), + "baseline-getproplistbasenative-stub-expandoshape"); TraceEdge(trc, &propStub->holder(), "baseline-getproplistbasenative-stub-holder"); TraceEdge(trc, &propStub->holderShape(), "baseline-getproplistbasenative-stub-holdershape"); TraceEdge(trc, &propStub->getter(), "baseline-getproplistbasenative-stub-getter"); @@ -481,8 +475,7 @@ ICStub::trace(JSTracer* trc) ICSetProp_NativeAdd* propStub = toSetProp_NativeAdd(); TraceEdge(trc, &propStub->group(), "baseline-setpropnativeadd-stub-group"); TraceEdge(trc, &propStub->newShape(), "baseline-setpropnativeadd-stub-newshape"); - if (propStub->newGroup()) - TraceEdge(trc, &propStub->newGroup(), "baseline-setpropnativeadd-stub-new-group"); + TraceNullableEdge(trc, &propStub->newGroup(), "baseline-setpropnativeadd-stub-new-group"); JS_STATIC_ASSERT(ICSetProp_NativeAdd::MAX_PROTO_CHAIN_DEPTH == 4); switch (propStub->protoChainDepth()) { case 0: propStub->toImpl<0>()->traceShapes(trc); break; @@ -529,15 +522,13 @@ ICStub::trace(JSTracer* trc) } case ICStub::NewArray_Fallback: { ICNewArray_Fallback* stub = toNewArray_Fallback(); - if (stub->templateObject()) - TraceEdge(trc, &stub->templateObject(), "baseline-newarray-template"); + TraceNullableEdge(trc, &stub->templateObject(), "baseline-newarray-template"); TraceEdge(trc, &stub->templateGroup(), "baseline-newarray-template-group"); break; } case ICStub::NewObject_Fallback: { ICNewObject_Fallback* stub = toNewObject_Fallback(); - if (stub->templateObject()) - TraceEdge(trc, &stub->templateObject(), "baseline-newobject-template"); + TraceNullableEdge(trc, &stub->templateObject(), "baseline-newobject-template"); break; } case ICStub::Rest_Fallback: { diff --git a/js/src/jsapi-tests/testGCExactRooting.cpp b/js/src/jsapi-tests/testGCExactRooting.cpp index b3bf87455e92..e0f04edbd44d 100644 --- a/js/src/jsapi-tests/testGCExactRooting.cpp +++ b/js/src/jsapi-tests/testGCExactRooting.cpp @@ -51,10 +51,8 @@ struct MyContainer MyContainer() : obj(nullptr), str(nullptr) {} void trace(JSTracer* trc) { - if (obj) - js::TraceEdge(trc, &obj, "test container"); - if (str) - js::TraceEdge(trc, &str, "test container"); + js::TraceNullableEdge(trc, &obj, "test container"); + js::TraceNullableEdge(trc, &str, "test container"); } }; diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp index a1e7e44cf0d9..4e857fa79d6b 100644 --- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -700,8 +700,7 @@ JSFunction::trace(JSTracer* trc) (HeapValue*)toExtended()->extendedSlots, "nativeReserved"); } - if (atom_) - TraceEdge(trc, &atom_, "atom"); + TraceNullableEdge(trc, &atom_, "atom"); if (isInterpreted()) { // Functions can be be marked as interpreted despite having no script diff --git a/js/src/jsiter.cpp b/js/src/jsiter.cpp index 662e9f0d611f..911727576778 100644 --- a/js/src/jsiter.cpp +++ b/js/src/jsiter.cpp @@ -57,8 +57,7 @@ NativeIterator::mark(JSTracer* trc) { for (HeapPtrFlatString* str = begin(); str < end(); str++) TraceEdge(trc, str, "prop"); - if (obj) - TraceEdge(trc, &obj, "obj"); + TraceNullableEdge(trc, &obj, "obj"); for (size_t i = 0; i < guard_length; i++) guard_array[i].trace(trc); diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp index f88f678eb577..80e4a9ab621b 100644 --- a/js/src/jsscript.cpp +++ b/js/src/jsscript.cpp @@ -346,8 +346,7 @@ Binding::trace(JSTracer* trc) void Bindings::trace(JSTracer* trc) { - if (callObjShape_) - TraceEdge(trc, &callObjShape_, "callObjShape"); + TraceNullableEdge(trc, &callObjShape_, "callObjShape"); /* * As the comment in Bindings explains, bindingsArray may point into freed @@ -3966,10 +3965,8 @@ JSScript::traceChildren(JSTracer* trc) zone()->isCollecting()); if (atoms) { - for (uint32_t i = 0; i < natoms(); ++i) { - if (atoms[i]) - TraceEdge(trc, &atoms[i], "atom"); - } + for (uint32_t i = 0; i < natoms(); ++i) + TraceNullableEdge(trc, &atoms[i], "atom"); } if (hasObjects()) { @@ -3982,19 +3979,13 @@ JSScript::traceChildren(JSTracer* trc) TraceRange(trc, constarray->length, constarray->vector, "consts"); } - if (sourceObject()) { - MOZ_ASSERT(MaybeForwarded(sourceObject())->compartment() == compartment()); - TraceEdge(trc, &sourceObject_, "sourceObject"); - } + MOZ_ASSERT_IF(sourceObject(), MaybeForwarded(sourceObject())->compartment() == compartment()); + TraceNullableEdge(trc, &sourceObject_, "sourceObject"); - if (functionNonDelazifying()) - TraceEdge(trc, &function_, "function"); + TraceNullableEdge(trc, &function_, "function"); + TraceNullableEdge(trc, &module_, "module"); - if (module_) - TraceEdge(trc, &module_, "module"); - - if (enclosingStaticScope_) - TraceEdge(trc, &enclosingStaticScope_, "enclosingStaticScope"); + TraceNullableEdge(trc, &enclosingStaticScope_, "enclosingStaticScope"); if (maybeLazyScript()) TraceManuallyBarrieredEdge(trc, &lazyScript, "lazyScript"); diff --git a/js/src/jsweakmap.cpp b/js/src/jsweakmap.cpp index 004c04806bb6..bd67162d51a6 100644 --- a/js/src/jsweakmap.cpp +++ b/js/src/jsweakmap.cpp @@ -48,8 +48,7 @@ WeakMapBase::markAll(JS::Zone* zone, JSTracer* tracer) MOZ_ASSERT(tracer->weakMapAction() != DoNotTraceWeakMaps); for (WeakMapBase* m : zone->gcWeakMapList) { m->trace(tracer); - if (m->memberOf) - TraceEdge(tracer, &m->memberOf, "memberOf"); + TraceNullableEdge(tracer, &m->memberOf, "memberOf"); } } diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp index aee52606d313..a70fd43098b3 100644 --- a/js/src/vm/Debugger.cpp +++ b/js/src/vm/Debugger.cpp @@ -2767,8 +2767,7 @@ Debugger::traceObject(JSTracer* trc, JSObject* obj) void Debugger::trace(JSTracer* trc) { - if (uncaughtExceptionHook) - TraceEdge(trc, &uncaughtExceptionHook, "hooks"); + TraceNullableEdge(trc, &uncaughtExceptionHook, "hooks"); /* * Mark Debugger.Frame objects. These are all reachable from JS, because the diff --git a/js/src/vm/Debugger.h b/js/src/vm/Debugger.h index c40eb9bb77eb..d32db0d71e6c 100644 --- a/js/src/vm/Debugger.h +++ b/js/src/vm/Debugger.h @@ -338,10 +338,8 @@ class Debugger : private mozilla::LinkedListElement bool inNursery; void trace(JSTracer* trc) { - if (frame) - TraceEdge(trc, &frame, "Debugger::AllocationsLogEntry::frame"); - if (ctorName) - TraceEdge(trc, &ctorName, "Debugger::AllocationsLogEntry::ctorName"); + TraceNullableEdge(trc, &frame, "Debugger::AllocationsLogEntry::frame"); + TraceNullableEdge(trc, &ctorName, "Debugger::AllocationsLogEntry::ctorName"); } }; diff --git a/js/src/vm/ReceiverGuard.cpp b/js/src/vm/ReceiverGuard.cpp index d491c5e44eb4..97df908c3b78 100644 --- a/js/src/vm/ReceiverGuard.cpp +++ b/js/src/vm/ReceiverGuard.cpp @@ -61,8 +61,6 @@ HeapReceiverGuard::keyBits(JSObject* obj) void HeapReceiverGuard::trace(JSTracer* trc) { - if (shape_) - TraceEdge(trc, &shape_, "receiver_guard_shape"); - if (group_) - TraceEdge(trc, &group_, "receiver_guard_group"); + TraceNullableEdge(trc, &shape_, "receiver_guard_shape"); + TraceNullableEdge(trc, &group_, "receiver_guard_group"); } diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp index cf947ef7ee67..54bc25b601d2 100644 --- a/js/src/vm/RegExpObject.cpp +++ b/js/src/vm/RegExpObject.cpp @@ -498,13 +498,11 @@ RegExpShared::trace(JSTracer* trc) if (trc->isMarkingTracer()) marked_ = true; - if (source) - TraceEdge(trc, &source, "RegExpShared source"); + TraceNullableEdge(trc, &source, "RegExpShared source"); for (size_t i = 0; i < ArrayLength(compilationArray); i++) { RegExpCompilation& compilation = compilationArray[i]; - if (compilation.jitCode) - TraceEdge(trc, &compilation.jitCode, "RegExpShared code"); + TraceNullableEdge(trc, &compilation.jitCode, "RegExpShared code"); } } diff --git a/js/src/vm/RegExpStatics.h b/js/src/vm/RegExpStatics.h index ce161b10dab3..426aba8fcbca 100644 --- a/js/src/vm/RegExpStatics.h +++ b/js/src/vm/RegExpStatics.h @@ -93,12 +93,9 @@ class RegExpStatics * Changes to this function must also be reflected in * RegExpStatics::AutoRooter::trace(). */ - if (matchesInput) - TraceEdge(trc, &matchesInput, "res->matchesInput"); - if (lazySource) - TraceEdge(trc, &lazySource, "res->lazySource"); - if (pendingInput) - TraceEdge(trc, &pendingInput, "res->pendingInput"); + TraceNullableEdge(trc, &matchesInput, "res->matchesInput"); + TraceNullableEdge(trc, &lazySource, "res->lazySource"); + TraceNullableEdge(trc, &pendingInput, "res->pendingInput"); } /* Value creators. */ diff --git a/js/src/vm/SavedStacks.h b/js/src/vm/SavedStacks.h index 023c9ab19766..3fb84876a43c 100644 --- a/js/src/vm/SavedStacks.h +++ b/js/src/vm/SavedStacks.h @@ -235,8 +235,7 @@ class SavedStacks { { } void trace(JSTracer* trc) { - if (source) - TraceEdge(trc, &source, "SavedStacks::LocationValue::source"); + TraceNullableEdge(trc, &source, "SavedStacks::LocationValue::source"); } bool needsSweep() { diff --git a/js/src/vm/TypeInference.cpp b/js/src/vm/TypeInference.cpp index 62e198ac7156..7f24c95e4e36 100644 --- a/js/src/vm/TypeInference.cpp +++ b/js/src/vm/TypeInference.cpp @@ -3420,8 +3420,7 @@ PreliminaryObjectArray::sweep() void PreliminaryObjectArrayWithTemplate::trace(JSTracer* trc) { - if (shape_) - TraceEdge(trc, &shape_, "PreliminaryObjectArrayWithTemplate_shape"); + TraceNullableEdge(trc, &shape_, "PreliminaryObjectArrayWithTemplate_shape"); } /* static */ void @@ -3981,15 +3980,9 @@ void TypeNewScript::trace(JSTracer* trc) { TraceEdge(trc, &function_, "TypeNewScript_function"); - - if (templateObject_) - TraceEdge(trc, &templateObject_, "TypeNewScript_templateObject"); - - if (initializedShape_) - TraceEdge(trc, &initializedShape_, "TypeNewScript_initializedShape"); - - if (initializedGroup_) - TraceEdge(trc, &initializedGroup_, "TypeNewScript_initializedGroup"); + TraceNullableEdge(trc, &templateObject_, "TypeNewScript_templateObject"); + TraceNullableEdge(trc, &initializedShape_, "TypeNewScript_initializedShape"); + TraceNullableEdge(trc, &initializedGroup_, "TypeNewScript_initializedGroup"); } /* static */ void diff --git a/js/src/vm/UnboxedObject.cpp b/js/src/vm/UnboxedObject.cpp index b1bd78c0ae52..c96e7c8b9ac6 100644 --- a/js/src/vm/UnboxedObject.cpp +++ b/js/src/vm/UnboxedObject.cpp @@ -35,20 +35,11 @@ UnboxedLayout::trace(JSTracer* trc) if (newScript()) newScript()->trace(trc); - if (nativeGroup_) - TraceEdge(trc, &nativeGroup_, "unboxed_layout_nativeGroup"); - - if (nativeShape_) - TraceEdge(trc, &nativeShape_, "unboxed_layout_nativeShape"); - - if (allocationScript_) - TraceEdge(trc, &allocationScript_, "unboxed_layout_allocationScript"); - - if (replacementGroup_) - TraceEdge(trc, &replacementGroup_, "unboxed_layout_replacementGroup"); - - if (constructorCode_) - TraceEdge(trc, &constructorCode_, "unboxed_layout_constructorCode"); + TraceNullableEdge(trc, &nativeGroup_, "unboxed_layout_nativeGroup"); + TraceNullableEdge(trc, &nativeShape_, "unboxed_layout_nativeShape"); + TraceNullableEdge(trc, &allocationScript_, "unboxed_layout_allocationScript"); + TraceNullableEdge(trc, &replacementGroup_, "unboxed_layout_replacementGroup"); + TraceNullableEdge(trc, &constructorCode_, "unboxed_layout_constructorCode"); } size_t @@ -327,8 +318,7 @@ UnboxedPlainObject::trace(JSTracer* trc, JSObject* obj) list++; while (*list != -1) { HeapPtrObject* heap = reinterpret_cast(data + *list); - if (*heap) - TraceEdge(trc, heap, "unboxed_object"); + TraceNullableEdge(trc, heap, "unboxed_object"); list++; } @@ -1146,8 +1136,7 @@ UnboxedArrayObject::trace(JSTracer* trc, JSObject* obj) case JSVAL_TYPE_OBJECT: for (size_t i = 0; i < initlen; i++) { HeapPtrObject* heap = reinterpret_cast(elements + i); - if (*heap) - TraceEdge(trc, heap, "unboxed_object"); + TraceNullableEdge(trc, heap, "unboxed_object"); } break;