diff --git a/src/README.md b/src/README.md index 57d41a6be89995..123bd0a7e9250b 100644 --- a/src/README.md +++ b/src/README.md @@ -126,9 +126,9 @@ Typical ways of working with internal fields are: * `obj->GetInternalField(i)` to get a JavaScript value from an internal field. * `obj->SetInternalField(i, v)` to store a JavaScript value in an internal field. -* `obj->GetAlignedPointerFromInternalField(i)` to get a `void*` pointer from an +* `obj->GetAlignedPointerFromInternalField(i, 0)` to get a `void*` pointer from an internal field. -* `obj->SetAlignedPointerInInternalField(i, p)` to store a `void*` pointer in an +* `obj->SetAlignedPointerInInternalField(i, p, 0)` to store a `void*` pointer in an internal field. [`Context`][]s provide the same feature under the name “embedder data”. diff --git a/src/base_object-inl.h b/src/base_object-inl.h index 68d45487b3f138..cdb086fb1e92c4 100644 --- a/src/base_object-inl.h +++ b/src/base_object-inl.h @@ -76,7 +76,7 @@ bool BaseObject::IsBaseObject(IsolateData* isolate_data, } uint16_t* ptr = static_cast( - obj->GetAlignedPointerFromInternalField(BaseObject::kEmbedderType)); + obj->GetAlignedPointerFromInternalField(BaseObject::kEmbedderType, 0)); return ptr == isolate_data->embedder_id_for_non_cppgc(); } @@ -84,21 +84,21 @@ void BaseObject::TagBaseObject(IsolateData* isolate_data, v8::Local object) { DCHECK_GE(object->InternalFieldCount(), BaseObject::kInternalFieldCount); object->SetAlignedPointerInInternalField( - BaseObject::kEmbedderType, isolate_data->embedder_id_for_non_cppgc()); + BaseObject::kEmbedderType, isolate_data->embedder_id_for_non_cppgc(), 0); } void BaseObject::SetInternalFields(IsolateData* isolate_data, v8::Local object, void* slot) { TagBaseObject(isolate_data, object); - object->SetAlignedPointerInInternalField(BaseObject::kSlot, slot); + object->SetAlignedPointerInInternalField(BaseObject::kSlot, slot, 0); } BaseObject* BaseObject::FromJSObject(v8::Local value) { v8::Local obj = value.As(); DCHECK_GE(obj->InternalFieldCount(), BaseObject::kInternalFieldCount); return static_cast( - obj->GetAlignedPointerFromInternalField(BaseObject::kSlot)); + obj->GetAlignedPointerFromInternalField(BaseObject::kSlot, 0)); } template diff --git a/src/base_object.cc b/src/base_object.cc index 404e2aa8c88d0c..7515a0c93da639 100644 --- a/src/base_object.cc +++ b/src/base_object.cc @@ -45,7 +45,7 @@ BaseObject::~BaseObject() { { HandleScope handle_scope(realm()->isolate()); - object()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr); + object()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr, 0); } } diff --git a/src/cppgc_helpers-inl.h b/src/cppgc_helpers-inl.h index 330af7a383058c..0e52bf5a6f4837 100644 --- a/src/cppgc_helpers-inl.h +++ b/src/cppgc_helpers-inl.h @@ -19,8 +19,8 @@ void CppgcMixin::Wrap(T* ptr, Realm* realm, v8::Local obj) { v8::Object::Wrap(isolate, obj, wrappable); // Keep the layout consistent with BaseObjects. obj->SetAlignedPointerInInternalField( - kEmbedderType, realm->isolate_data()->embedder_id_for_cppgc()); - obj->SetAlignedPointerInInternalField(kSlot, ptr); + kEmbedderType, realm->isolate_data()->embedder_id_for_cppgc(), 0); + obj->SetAlignedPointerInInternalField(kSlot, ptr, 0); realm->TrackCppgcWrapper(ptr); } @@ -41,7 +41,7 @@ T* CppgcMixin::Unwrap(v8::Local obj) { if (obj->InternalFieldCount() != T::kInternalFieldCount) { return nullptr; } - T* ptr = static_cast(obj->GetAlignedPointerFromInternalField(T::kSlot)); + T* ptr = static_cast(obj->GetAlignedPointerFromInternalField(T::kSlot, 0)); return ptr; } diff --git a/src/env-inl.h b/src/env-inl.h index e790a5cf551895..76fccf1e9fc9fa 100644 --- a/src/env-inl.h +++ b/src/env-inl.h @@ -198,7 +198,7 @@ inline Environment* Environment::GetCurrent(v8::Local context) { } return static_cast( context->GetAlignedPointerFromEmbedderData( - ContextEmbedderIndex::kEnvironment)); + ContextEmbedderIndex::kEnvironment, 0)); } inline Environment* Environment::GetCurrent( diff --git a/src/env.cc b/src/env.cc index 13ec0d759166df..1c037a2f2424c8 100644 --- a/src/env.cc +++ b/src/env.cc @@ -674,12 +674,12 @@ void Environment::AssignToContext(Local context, Realm* realm, const ContextInfo& info) { context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment, - this); - context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, realm); + this, 0); + context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, realm, 0); // ContextifyContexts will update this to a pointer to the native object. context->SetAlignedPointerInEmbedderData( - ContextEmbedderIndex::kContextifyContext, nullptr); + ContextEmbedderIndex::kContextifyContext, nullptr, 0); // This must not be done before other context fields are initialized. ContextEmbedderTag::TagNodeContext(context); @@ -695,11 +695,11 @@ void Environment::AssignToContext(Local context, void Environment::UnassignFromContext(Local context) { if (!context.IsEmpty()) { context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment, - nullptr); + nullptr, 0); context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, - nullptr); + nullptr, 0); context->SetAlignedPointerInEmbedderData( - ContextEmbedderIndex::kContextifyContext, nullptr); + ContextEmbedderIndex::kContextifyContext, nullptr, 0); } UntrackContext(context); } diff --git a/src/histogram.cc b/src/histogram.cc index 836a51b0e5aa4b..e29b9fba04e469 100644 --- a/src/histogram.cc +++ b/src/histogram.cc @@ -136,7 +136,7 @@ HistogramBase::HistogramBase( MakeWeak(); wrap->SetAlignedPointerInInternalField( HistogramImpl::InternalFields::kImplField, - static_cast(this)); + static_cast(this), 0); } HistogramBase::HistogramBase( @@ -148,7 +148,7 @@ HistogramBase::HistogramBase( MakeWeak(); wrap->SetAlignedPointerInInternalField( HistogramImpl::InternalFields::kImplField, - static_cast(this)); + static_cast(this), 0); } void HistogramBase::MemoryInfo(MemoryTracker* tracker) const { @@ -362,7 +362,7 @@ IntervalHistogram::IntervalHistogram( MakeWeak(); wrap->SetAlignedPointerInInternalField( HistogramImpl::InternalFields::kImplField, - static_cast(this)); + static_cast(this), 0); uv_timer_init(env->event_loop(), &timer_); } @@ -601,7 +601,7 @@ HistogramImpl* HistogramImpl::FromJSObject(Local value) { auto obj = value.As(); DCHECK_GE(obj->InternalFieldCount(), HistogramImpl::kInternalFieldCount); return static_cast( - obj->GetAlignedPointerFromInternalField(HistogramImpl::kImplField)); + obj->GetAlignedPointerFromInternalField(HistogramImpl::kImplField, 0)); } std::unique_ptr diff --git a/src/js_udp_wrap.cc b/src/js_udp_wrap.cc index 51e4f8c45ffd38..2cf2b097441872 100644 --- a/src/js_udp_wrap.cc +++ b/src/js_udp_wrap.cc @@ -56,7 +56,7 @@ JSUDPWrap::JSUDPWrap(Environment* env, Local obj) MakeWeak(); obj->SetAlignedPointerInInternalField( - kUDPWrapBaseField, static_cast(this)); + kUDPWrapBaseField, static_cast(this), 0); } int JSUDPWrap::RecvStart() { diff --git a/src/node_context_data.h b/src/node_context_data.h index d81c75daaae47b..dd6887c9fd6055 100644 --- a/src/node_context_data.h +++ b/src/node_context_data.h @@ -135,7 +135,7 @@ class ContextEmbedderTag { // context. context->SetAlignedPointerInEmbedderData( ContextEmbedderIndex::kContextTag, - ContextEmbedderTag::kNodeContextTagPtr); + ContextEmbedderTag::kNodeContextTagPtr, 0); } static inline bool IsNodeContext(v8::Local context) { @@ -147,7 +147,7 @@ class ContextEmbedderTag { return false; } if (context->GetAlignedPointerFromEmbedderData( - ContextEmbedderIndex::kContextTag) != + ContextEmbedderIndex::kContextTag, 0) != ContextEmbedderTag::kNodeContextTagPtr) [[unlikely]] { return false; } diff --git a/src/node_contextify.cc b/src/node_contextify.cc index 8dc96588f2cd28..ca4b8f70513b9a 100644 --- a/src/node_contextify.cc +++ b/src/node_contextify.cc @@ -163,9 +163,9 @@ ContextifyContext::ContextifyContext(Environment* env, // This should only be done after the initial initializations of the context // global object is finished. DCHECK_NULL(v8_context->GetAlignedPointerFromEmbedderData( - ContextEmbedderIndex::kContextifyContext)); + ContextEmbedderIndex::kContextifyContext, 0)); v8_context->SetAlignedPointerInEmbedderData( - ContextEmbedderIndex::kContextifyContext, this); + ContextEmbedderIndex::kContextifyContext, this, 0); } void ContextifyContext::InitializeGlobalTemplates(IsolateData* isolate_data) { @@ -472,7 +472,7 @@ ContextifyContext* ContextifyContext::Get(Local object) { } return static_cast( context->GetAlignedPointerFromEmbedderData( - ContextEmbedderIndex::kContextifyContext)); + ContextEmbedderIndex::kContextifyContext, 0)); } bool ContextifyContext::IsStillInitializing(const ContextifyContext* ctx) { diff --git a/src/node_object_wrap.h b/src/node_object_wrap.h index cb13d84388bcc6..c2d5f80c1d073d 100644 --- a/src/node_object_wrap.h +++ b/src/node_object_wrap.h @@ -49,7 +49,8 @@ class ObjectWrap { assert(handle->InternalFieldCount() > 0); // Cast to ObjectWrap before casting to T. A direct cast from void // to T won't work right when T has more than one base class. - void* ptr = handle->GetAlignedPointerFromInternalField(0); + void* ptr = handle->GetAlignedPointerFromInternalField( + 0, v8::EmbedderDataTypeTag(0)); ObjectWrap* wrap = static_cast(ptr); return static_cast(wrap); } @@ -75,7 +76,7 @@ class ObjectWrap { inline void Wrap(v8::Local handle) { assert(persistent().IsEmpty()); assert(handle->InternalFieldCount() > 0); - handle->SetAlignedPointerInInternalField(0, this); + handle->SetAlignedPointerInInternalField(0, this, 0); persistent().Reset(v8::Isolate::GetCurrent(), handle); MakeWeak(); } diff --git a/src/node_process_methods.cc b/src/node_process_methods.cc index 9b33f695b1003a..2b23424ccf3539 100644 --- a/src/node_process_methods.cc +++ b/src/node_process_methods.cc @@ -679,7 +679,7 @@ void BindingData::RegisterExternalReferences( BindingData* BindingData::FromV8Value(Local value) { Local v8_object = value.As(); return static_cast( - v8_object->GetAlignedPointerFromInternalField(BaseObject::kSlot)); + v8_object->GetAlignedPointerFromInternalField(BaseObject::kSlot, 0)); } void BindingData::MemoryInfo(MemoryTracker* tracker) const { diff --git a/src/node_realm-inl.h b/src/node_realm-inl.h index f162d1506c990a..11672b36a03e9b 100644 --- a/src/node_realm-inl.h +++ b/src/node_realm-inl.h @@ -20,8 +20,8 @@ inline Realm* Realm::GetCurrent(v8::Local context) { if (!ContextEmbedderTag::IsNodeContext(context)) [[unlikely]] { return nullptr; } - return static_cast( - context->GetAlignedPointerFromEmbedderData(ContextEmbedderIndex::kRealm)); + return static_cast(context->GetAlignedPointerFromEmbedderData( + ContextEmbedderIndex::kRealm, 0)); } inline Realm* Realm::GetCurrent( diff --git a/src/node_snapshotable.cc b/src/node_snapshotable.cc index e34d24d51d5c09..5f8b7700a70b6a 100644 --- a/src/node_snapshotable.cc +++ b/src/node_snapshotable.cc @@ -1309,7 +1309,7 @@ StartupData SerializeNodeContextData(Local holder, case ContextEmbedderIndex::kContextifyContext: case ContextEmbedderIndex::kRealm: case ContextEmbedderIndex::kContextTag: { - void* data = holder->GetAlignedPointerFromEmbedderData(index); + void* data = holder->GetAlignedPointerFromEmbedderData(index, 0); per_process::Debug( DebugCategory::MKSNAPSHOT, "Serialize context data, index=%d, holder=%p, ptr=%p\n", @@ -1400,7 +1400,7 @@ StartupData SerializeNodeContextInternalFields(Local holder, // For the moment we do not set any internal fields in ArrayBuffer // or ArrayBufferViews, so just return nullptr. if (holder->IsArrayBuffer() || holder->IsArrayBufferView()) { - CHECK_NULL(holder->GetAlignedPointerFromInternalField(index)); + CHECK_NULL(holder->GetAlignedPointerFromInternalField(index, 0)); return StartupData{nullptr, 0}; } @@ -1420,7 +1420,7 @@ StartupData SerializeNodeContextInternalFields(Local holder, *holder); BaseObject* object_ptr = static_cast( - holder->GetAlignedPointerFromInternalField(BaseObject::kSlot)); + holder->GetAlignedPointerFromInternalField(BaseObject::kSlot, 0)); // If the native object is already set to null, ignore it. if (object_ptr == nullptr) { return StartupData{nullptr, 0}; diff --git a/src/stream_base-inl.h b/src/stream_base-inl.h index 29a4c29f3d3822..b1881adbd82604 100644 --- a/src/stream_base-inl.h +++ b/src/stream_base-inl.h @@ -19,22 +19,22 @@ StreamReq::StreamReq( void StreamReq::AttachToObject(v8::Local req_wrap_obj) { CHECK_EQ(req_wrap_obj->GetAlignedPointerFromInternalField( - StreamReq::kStreamReqField), + StreamReq::kStreamReqField, 0), nullptr); req_wrap_obj->SetAlignedPointerInInternalField( - StreamReq::kStreamReqField, this); + StreamReq::kStreamReqField, this, 0); } StreamReq* StreamReq::FromObject(v8::Local req_wrap_obj) { return static_cast( req_wrap_obj->GetAlignedPointerFromInternalField( - StreamReq::kStreamReqField)); + StreamReq::kStreamReqField, 0)); } void StreamReq::Dispose() { BaseObjectPtr destroy_me{GetAsyncWrap()}; object()->SetAlignedPointerInInternalField( - StreamReq::kStreamReqField, nullptr); + StreamReq::kStreamReqField, nullptr, 0); destroy_me->Detach(); } @@ -119,17 +119,15 @@ SimpleWriteWrap::SimpleWriteWrap( } void StreamBase::AttachToObject(v8::Local obj) { - obj->SetAlignedPointerInInternalField( - StreamBase::kStreamBaseField, this); + obj->SetAlignedPointerInInternalField(StreamBase::kStreamBaseField, this, 0); } StreamBase* StreamBase::FromObject(v8::Local obj) { - if (obj->GetAlignedPointerFromInternalField(StreamBase::kSlot) == nullptr) + if (obj->GetAlignedPointerFromInternalField(StreamBase::kSlot, 0) == nullptr) return nullptr; return static_cast( - obj->GetAlignedPointerFromInternalField( - StreamBase::kStreamBaseField)); + obj->GetAlignedPointerFromInternalField(StreamBase::kStreamBaseField, 0)); } WriteWrap* WriteWrap::FromObject(v8::Local req_wrap_obj) { @@ -162,8 +160,8 @@ void WriteWrap::SetBackingStore(std::unique_ptr bs) { void StreamReq::ResetObject(v8::Local obj) { DCHECK_GT(obj->InternalFieldCount(), StreamReq::kStreamReqField); - obj->SetAlignedPointerInInternalField(StreamReq::kSlot, nullptr); - obj->SetAlignedPointerInInternalField(StreamReq::kStreamReqField, nullptr); + obj->SetAlignedPointerInInternalField(StreamReq::kSlot, nullptr, 0); + obj->SetAlignedPointerInInternalField(StreamReq::kStreamReqField, nullptr, 0); } } // namespace node diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 0821d07b5cde7c..11af4b58715b73 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -127,8 +127,8 @@ void UDPWrapBase::set_listener(UDPListener* listener) { UDPWrapBase* UDPWrapBase::FromObject(Local obj) { CHECK_GT(obj->InternalFieldCount(), UDPWrapBase::kUDPWrapBaseField); - return static_cast( - obj->GetAlignedPointerFromInternalField(UDPWrapBase::kUDPWrapBaseField)); + return static_cast(obj->GetAlignedPointerFromInternalField( + UDPWrapBase::kUDPWrapBaseField, 0)); } void UDPWrapBase::AddMethods(Environment* env, Local t) { @@ -148,7 +148,7 @@ UDPWrap::UDPWrap(Environment* env, Local object) reinterpret_cast(&handle_), AsyncWrap::PROVIDER_UDPWRAP) { object->SetAlignedPointerInInternalField( - UDPWrapBase::kUDPWrapBaseField, static_cast(this)); + UDPWrapBase::kUDPWrapBaseField, static_cast(this), 0); int r = uv_udp_init(env->event_loop(), &handle_); CHECK_EQ(r, 0); // can't fail anyway