Bug 1265679 - Always call the object moved hook in generational GC r=terrence
--- a/js/src/gc/Marking.cpp
+++ b/js/src/gc/Marking.cpp
@@ -2271,30 +2271,28 @@ js::TenuringTracer::moveObjectToTenured(
// The shape's list head may point into the old object. This can only
// happen for dictionaries, which are native objects.
if (&nsrc->shape_ == ndst->shape_->listp) {
MOZ_ASSERT(nsrc->shape_->inDictionary());
ndst->shape_->listp = &ndst->shape_;
}
}
- if (src->getClass()->flags & JSCLASS_SKIP_NURSERY_FINALIZE) {
- if (src->is<InlineTypedObject>()) {
- InlineTypedObject::objectMovedDuringMinorGC(this, dst, src);
- } else if (src->is<UnboxedArrayObject>()) {
- tenuredSize += UnboxedArrayObject::objectMovedDuringMinorGC(this, dst, src, dstKind);
- } else if (src->is<ArgumentsObject>()) {
- tenuredSize += ArgumentsObject::objectMovedDuringMinorGC(this, dst, src);
- } else if (JSObjectMovedOp op = dst->getClass()->extObjectMovedOp()) {
- op(dst, src);
- } else {
- // Objects with JSCLASS_SKIP_NURSERY_FINALIZE need to be handled above
- // to ensure any additional nursery buffers they hold are moved.
- MOZ_CRASH("Unhandled JSCLASS_SKIP_NURSERY_FINALIZE Class");
- }
+ if (src->is<InlineTypedObject>()) {
+ InlineTypedObject::objectMovedDuringMinorGC(this, dst, src);
+ } else if (src->is<UnboxedArrayObject>()) {
+ tenuredSize += UnboxedArrayObject::objectMovedDuringMinorGC(this, dst, src, dstKind);
+ } else if (src->is<ArgumentsObject>()) {
+ tenuredSize += ArgumentsObject::objectMovedDuringMinorGC(this, dst, src);
+ } else if (JSObjectMovedOp op = dst->getClass()->extObjectMovedOp()) {
+ op(dst, src);
+ } else if (src->getClass()->flags & JSCLASS_SKIP_NURSERY_FINALIZE) {
+ // Objects with JSCLASS_SKIP_NURSERY_FINALIZE need to be handled above
+ // to ensure any additional nursery buffers they hold are moved.
+ MOZ_CRASH("Unhandled JSCLASS_SKIP_NURSERY_FINALIZE Class");
}
return tenuredSize;
}
size_t
js::TenuringTracer::moveSlotsToTenured(NativeObject* dst, NativeObject* src, AllocKind dstKind)
{