diff --git a/mfbt/Range.h b/mfbt/Range.h index 149870f4d435..ba6028fa2389 100644 --- a/mfbt/Range.h +++ b/mfbt/Range.h @@ -26,6 +26,14 @@ public: : mStart(aPtr, aPtr, aPtr + aLength), mEnd(aPtr + aLength, aPtr, aPtr + aLength) {} + Range(const RangedPtr& aStart, const RangedPtr& aEnd) + : mStart(aStart.get(), aStart.get(), aEnd.get()), + mEnd(aEnd.get(), aStart.get(), aEnd.get()) + { + // Only accept two RangedPtrs within the same range. + aStart.checkIdenticalRange(aEnd); + MOZ_ASSERT(aStart <= aEnd); + } RangedPtr start() const { return mStart; } RangedPtr end() const { return mEnd; } diff --git a/mfbt/RangedPtr.h b/mfbt/RangedPtr.h index 4ac3c9e35b61..a07c1f4f85a2 100644 --- a/mfbt/RangedPtr.h +++ b/mfbt/RangedPtr.h @@ -117,6 +117,12 @@ public: explicit operator bool() const { return mPtr != nullptr; } + void checkIdenticalRange(const RangedPtr& aOther) const + { + MOZ_ASSERT(mRangeStart == aOther.mRangeStart); + MOZ_ASSERT(mRangeEnd == aOther.mRangeEnd); + } + /* * You can only assign one RangedPtr into another if the two pointers have * the same valid range: @@ -129,8 +135,7 @@ public: */ RangedPtr& operator=(const RangedPtr& aOther) { - MOZ_ASSERT(mRangeStart == aOther.mRangeStart); - MOZ_ASSERT(mRangeEnd == aOther.mRangeEnd); + checkIdenticalRange(aOther); mPtr = aOther.mPtr; checkSanity(); return *this;