diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp index 61baadef81..00d4222272 100644 --- a/js/src/vm/RegExpObject.cpp +++ b/js/src/vm/RegExpObject.cpp @@ -187,11 +187,6 @@ IsMarkingTrace(JSTracer* trc) void RegExpObject::trace(JSTracer* trc) { - // When marking the object normally we have the option of unlinking the - // object from its RegExpShared so that the RegExpShared may be collected. - if (IsMarkingTrace(trc) && !zone()->isPreservingCode()) - sharedRef() = nullptr; - TraceNullableEdge(trc, &sharedRef(), "RegExpObject shared"); } diff --git a/js/src/vm/RegExpObject.h b/js/src/vm/RegExpObject.h index 4f35908087..f4adf76e83 100644 --- a/js/src/vm/RegExpObject.h +++ b/js/src/vm/RegExpObject.h @@ -464,7 +464,7 @@ class RegExpObject : public NativeObject void setShared(RegExpShared& shared) { MOZ_ASSERT(!hasShared()); - sharedRef() = &shared; + sharedRef().init(&shared); } static void trace(JSTracer* trc, JSObject* obj); @@ -490,9 +490,9 @@ class RegExpObject : public NativeObject static MOZ_MUST_USE bool createShared(JSContext* cx, Handle regexp, MutableHandleRegExpShared shared); - ReadBarriered& sharedRef() { + PreBarriered& sharedRef() { auto& ref = NativeObject::privateRef(PRIVATE_SLOT); - return reinterpret_cast&>(ref); + return reinterpret_cast&>(ref); } /* Call setShared in preference to setPrivate. */