Bug 1153959 - Use RAII to manage tracing details; r=jonco

This commit is contained in:
Terrence Cole
2015-04-10 13:33:56 -07:00
parent 6a2cf633af
commit 4d9465e2f8
15 changed files with 261 additions and 362 deletions

View File

@@ -3490,13 +3490,21 @@ js::ToObjectSlow(JSContext* cx, JS::HandleValue val, bool reportScanStack)
return PrimitiveToObject(cx, val);
}
void
js::GetObjectSlotName(JSTracer* trc, char* buf, size_t bufsize)
class GetObjectSlotNameFunctor : public JS::CallbackTracer::ContextFunctor
{
MOZ_ASSERT(trc->debugPrinter() == GetObjectSlotName);
JSObject* obj;
JSObject* obj = (JSObject*)trc->debugPrintArg();
uint32_t slot = uint32_t(trc->debugPrintIndex());
public:
explicit GetObjectSlotNameFunctor(JSObject* ctx) : obj(ctx) {}
virtual void operator()(JS::CallbackTracer* trc, char* buf, size_t bufsize) override;
};
void
GetObjectSlotNameFunctor::operator()(JS::CallbackTracer* trc, char* buf, size_t bufsize)
{
MOZ_ASSERT(trc->contextIndex() != JS::CallbackTracer::InvalidIndex);
uint32_t slot = uint32_t(trc->contextIndex());
Shape* shape;
if (obj->isNative()) {
@@ -4069,7 +4077,11 @@ JSObject::markChildren(JSTracer* trc)
TraceEdge(trc, &nobj->shape_, "shape");
MarkObjectSlots(trc, nobj, 0, nobj->slotSpan());
{
GetObjectSlotNameFunctor func(nobj);
JS::AutoTracingDetails ctx(trc, func);
MarkObjectSlots(trc, nobj, 0, nobj->slotSpan());
}
do {
if (nobj->denseElementsAreCopyOnWrite()) {