mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-17 14:25:49 +00:00
Bug 1428742 - use Value::toGCCellPtr and delegating ctr of GCCellPtr. r=jonco
Differential Revision: https://phabricator.services.mozilla.com/D103589
This commit is contained in:
parent
37fcc6f78b
commit
cd2514ec74
@ -20,6 +20,7 @@
|
||||
#include "js-config.h"
|
||||
#include "jstypes.h"
|
||||
|
||||
#include "js/HeapAPI.h"
|
||||
#include "js/RootingAPI.h"
|
||||
#include "js/TypeDecls.h"
|
||||
|
||||
@ -930,7 +931,7 @@ static MOZ_ALWAYS_INLINE void ExposeValueToActiveJS(const Value& v) {
|
||||
MOZ_ASSERT(!js::gc::EdgeNeedsSweepUnbarrieredSlow(&tmp));
|
||||
#endif
|
||||
if (v.isGCThing()) {
|
||||
js::gc::ExposeGCThingToActiveJS(GCCellPtr(v));
|
||||
js::gc::ExposeGCThingToActiveJS(v.toGCCellPtr());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1162,6 +1163,7 @@ class WrappedPtrOperations<JS::Value, Wrapper> {
|
||||
JS::BigInt* toBigInt() const { return value().toBigInt(); }
|
||||
JSObject& toObject() const { return value().toObject(); }
|
||||
JSObject* toObjectOrNull() const { return value().toObjectOrNull(); }
|
||||
JS::GCCellPtr toGCCellPtr() const { return value().toGCCellPtr(); }
|
||||
gc::Cell* toGCThing() const { return value().toGCThing(); }
|
||||
JS::TraceKind traceKind() const { return value().traceKind(); }
|
||||
void* toPrivate() const { return value().toPrivate(); }
|
||||
|
@ -235,6 +235,7 @@
|
||||
#include "jit/JitRuntime.h"
|
||||
#include "jit/JitZone.h"
|
||||
#include "jit/MacroAssembler.h" // js::jit::CodeAlignment
|
||||
#include "js/HeapAPI.h" // JS::GCCellPtr
|
||||
#include "js/Object.h" // JS::GetClass
|
||||
#include "js/SliceBudget.h"
|
||||
#include "proxy/DeadObjectProxy.h"
|
||||
@ -8307,37 +8308,8 @@ JS_FRIEND_API size_t JS::GCTraceKindSize(JS::TraceKind kind) {
|
||||
}
|
||||
}
|
||||
|
||||
JS::GCCellPtr::GCCellPtr(const Value& v) : ptr(0) {
|
||||
switch (v.type()) {
|
||||
case ValueType::String:
|
||||
ptr = checkedCast(v.toString(), JS::TraceKind::String);
|
||||
return;
|
||||
case ValueType::Object:
|
||||
ptr = checkedCast(&v.toObject(), JS::TraceKind::Object);
|
||||
return;
|
||||
case ValueType::Symbol:
|
||||
ptr = checkedCast(v.toSymbol(), JS::TraceKind::Symbol);
|
||||
return;
|
||||
case ValueType::BigInt:
|
||||
ptr = checkedCast(v.toBigInt(), JS::TraceKind::BigInt);
|
||||
return;
|
||||
case ValueType::PrivateGCThing:
|
||||
ptr = checkedCast(v.toGCThing(), v.toGCThing()->getTraceKind());
|
||||
return;
|
||||
case ValueType::Double:
|
||||
case ValueType::Int32:
|
||||
case ValueType::Boolean:
|
||||
case ValueType::Undefined:
|
||||
case ValueType::Null:
|
||||
case ValueType::Magic: {
|
||||
MOZ_ASSERT(!v.isGCThing());
|
||||
ptr = checkedCast(nullptr, JS::TraceKind::Null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ReportBadValueTypeAndCrash(v);
|
||||
}
|
||||
JS::GCCellPtr::GCCellPtr(const Value& v)
|
||||
: GCCellPtr(v.toGCThing(), v.traceKind()) {}
|
||||
|
||||
JS::TraceKind JS::GCCellPtr::outOfLineKind() const {
|
||||
MOZ_ASSERT((ptr & OutOfLineTraceKindMask) == OutOfLineTraceKindMask);
|
||||
|
@ -35,11 +35,11 @@ BEGIN_TEST(testGCCellPtr) {
|
||||
|
||||
CHECK(JS::GCCellPtr(obj.get()));
|
||||
CHECK(JS::GCCellPtr(obj.get()).kind() == JS::TraceKind::Object);
|
||||
CHECK(JS::GCCellPtr(JS::ObjectValue(*obj)).kind() == JS::TraceKind::Object);
|
||||
CHECK(JS::ObjectValue(*obj).toGCCellPtr().kind() == JS::TraceKind::Object);
|
||||
|
||||
CHECK(JS::GCCellPtr(str.get()));
|
||||
CHECK(JS::GCCellPtr(str.get()).kind() == JS::TraceKind::String);
|
||||
CHECK(JS::GCCellPtr(JS::StringValue(str)).kind() == JS::TraceKind::String);
|
||||
CHECK(JS::StringValue(str).toGCCellPtr().kind() == JS::TraceKind::String);
|
||||
|
||||
CHECK(JS::GCCellPtr(script.get()));
|
||||
CHECK(!JS::GCCellPtr(nullptr));
|
||||
|
@ -162,7 +162,7 @@ void ProxyObject::setSameCompartmentPrivate(const Value& priv) {
|
||||
|
||||
inline void ProxyObject::setPrivate(const Value& priv) {
|
||||
MOZ_ASSERT_IF(IsMarkedBlack(this) && priv.isGCThing(),
|
||||
!JS::GCThingIsMarkedGray(JS::GCCellPtr(priv)));
|
||||
!JS::GCThingIsMarkedGray(priv.toGCCellPtr()));
|
||||
*slotOfPrivate() = priv;
|
||||
}
|
||||
|
||||
|
@ -77,7 +77,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(XPCVariant)
|
||||
JS::Value val = tmp->GetJSValPreserveColor();
|
||||
if (val.isObject()) {
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mJSVal");
|
||||
cb.NoteJSChild(JS::GCCellPtr(val));
|
||||
cb.NoteJSChild(val.toGCCellPtr());
|
||||
}
|
||||
|
||||
tmp->mData.Traverse(cb);
|
||||
|
@ -34,7 +34,7 @@ void nsCycleCollectionParticipant::NoteJSChild(JS::GCCellPtr aGCThing,
|
||||
void TraceCallbackFunc::Trace(JS::Heap<JS::Value>* aPtr, const char* aName,
|
||||
void* aClosure) const {
|
||||
if (aPtr->unbarrieredGet().isGCThing()) {
|
||||
mCallback(JS::GCCellPtr(aPtr->unbarrieredGet()), aName, aClosure);
|
||||
mCallback(aPtr->unbarrieredGet().toGCCellPtr(), aName, aClosure);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user