зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1421152 - Add a checked cast method to TenuredCell. r=jonco
This commit is contained in:
Родитель
5b80c7cb65
Коммит
5dfaa64c5f
|
@ -237,15 +237,14 @@ AtomMarkingRuntime::atomIsMarked(Zone* zone, TenuredCell* thing)
|
|||
if (!thing)
|
||||
return true;
|
||||
|
||||
JS::TraceKind kind = thing->getTraceKind();
|
||||
if (kind == JS::TraceKind::String) {
|
||||
JSString* str = static_cast<JSString*>(thing);
|
||||
if (str->isAtom())
|
||||
return atomIsMarked(zone, &str->asAtom());
|
||||
return true;
|
||||
if (thing->is<JSString>()) {
|
||||
JSString* str = thing->as<JSString>();
|
||||
return str->isAtom() ? atomIsMarked(zone, &str->asAtom()) : true;
|
||||
}
|
||||
if (kind == JS::TraceKind::Symbol)
|
||||
return atomIsMarked(zone, static_cast<JS::Symbol*>(thing));
|
||||
|
||||
if (thing->is<JS::Symbol>())
|
||||
return atomIsMarked(zone, thing->as<JS::Symbol>());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -138,6 +138,23 @@ class TenuredCell : public Cell
|
|||
return JS::shadow::Zone::asShadowZone(zoneFromAnyThread());
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline bool is() const {
|
||||
return getTraceKind() == JS::MapTypeToTraceKind<T>::kind;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
inline T* as() {
|
||||
MOZ_ASSERT(is<T>());
|
||||
return static_cast<T*>(this);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline const T* as() const {
|
||||
MOZ_ASSERT(is<T>());
|
||||
return static_cast<const T*>(this);
|
||||
}
|
||||
|
||||
static MOZ_ALWAYS_INLINE void readBarrier(TenuredCell* thing);
|
||||
static MOZ_ALWAYS_INLINE void writeBarrierPre(TenuredCell* thing);
|
||||
|
||||
|
|
|
@ -2016,7 +2016,8 @@ inline T*
|
|||
MarkStack::TaggedPtr::as() const
|
||||
{
|
||||
MOZ_ASSERT(tag() == MapTypeToMarkStackTag<T*>::value);
|
||||
MOZ_ASSERT(ptr()->asTenured().getTraceKind() == MapTypeToTraceKind<T>::kind);
|
||||
MOZ_ASSERT(ptr()->isTenured());
|
||||
MOZ_ASSERT(ptr()->is<T>());
|
||||
return static_cast<T*>(ptr());
|
||||
}
|
||||
|
||||
|
@ -2024,7 +2025,8 @@ inline JSObject*
|
|||
MarkStack::TaggedPtr::asValueArrayObject() const
|
||||
{
|
||||
MOZ_ASSERT(tag() == ValueArrayTag);
|
||||
MOZ_ASSERT(ptr()->asTenured().getTraceKind() == JS::TraceKind::Object);
|
||||
MOZ_ASSERT(ptr()->isTenured());
|
||||
MOZ_ASSERT(ptr()->is<JSObject>());
|
||||
return static_cast<JSObject*>(ptr());
|
||||
}
|
||||
|
||||
|
@ -2032,7 +2034,8 @@ inline JSObject*
|
|||
MarkStack::TaggedPtr::asSavedValueArrayObject() const
|
||||
{
|
||||
MOZ_ASSERT(tag() == SavedValueArrayTag);
|
||||
MOZ_ASSERT(ptr()->asTenured().getTraceKind() == JS::TraceKind::Object);
|
||||
MOZ_ASSERT(ptr()->isTenured());
|
||||
MOZ_ASSERT(ptr()->is<JSObject>());
|
||||
return static_cast<JSObject*>(ptr());
|
||||
}
|
||||
|
||||
|
@ -2040,7 +2043,8 @@ inline JSRope*
|
|||
MarkStack::TaggedPtr::asTempRope() const
|
||||
{
|
||||
MOZ_ASSERT(tag() == TempRopeTag);
|
||||
MOZ_ASSERT(ptr()->asTenured().getTraceKind() == JS::TraceKind::String);
|
||||
MOZ_ASSERT(ptr()->isTenured());
|
||||
MOZ_ASSERT(ptr()->is<JSString>());
|
||||
return static_cast<JSRope*>(ptr());
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче