diff --git a/src/README.md b/src/README.md index 15317f06ae0ca3..5853e1efa2396b 100644 --- a/src/README.md +++ b/src/README.md @@ -574,8 +574,7 @@ void InitializeHttpParser(Local target, Local context, void* priv) { Realm* realm = Realm::GetCurrent(context); - BindingData* const binding_data = - realm->AddBindingData(context, target); + BindingData* const binding_data = realm->AddBindingData(target); if (binding_data == nullptr) return; Local t = NewFunctionTemplate(realm->isolate(), Parser::New); diff --git a/src/encoding_binding.cc b/src/encoding_binding.cc index 0cf588295405ac..b65a4f868e2b26 100644 --- a/src/encoding_binding.cc +++ b/src/encoding_binding.cc @@ -78,7 +78,7 @@ void BindingData::Deserialize(Local context, // Recreate the buffer in the constructor. InternalFieldInfo* casted_info = static_cast(info); BindingData* binding = - realm->AddBindingData(context, holder, casted_info); + realm->AddBindingData(holder, casted_info); CHECK_NOT_NULL(binding); } @@ -232,7 +232,7 @@ void BindingData::CreatePerContextProperties(Local target, Local context, void* priv) { Realm* realm = Realm::GetCurrent(context); - realm->AddBindingData(context, target); + realm->AddBindingData(target); } void BindingData::RegisterTimerExternalReferences( diff --git a/src/env.cc b/src/env.cc index 0452766b806062..bcac86e85b732e 100644 --- a/src/env.cc +++ b/src/env.cc @@ -619,10 +619,6 @@ void Environment::AssignToContext(Local context, context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment, this); context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, realm); - // Used to retrieve bindings - context->SetAlignedPointerInEmbedderData( - ContextEmbedderIndex::kBindingDataStoreIndex, - realm != nullptr ? realm->binding_data_store() : nullptr); // ContextifyContexts will update this to a pointer to the native object. context->SetAlignedPointerInEmbedderData( @@ -645,8 +641,6 @@ void Environment::UnassignFromContext(Local context) { nullptr); context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, nullptr); - context->SetAlignedPointerInEmbedderData( - ContextEmbedderIndex::kBindingDataStoreIndex, nullptr); context->SetAlignedPointerInEmbedderData( ContextEmbedderIndex::kContextifyContext, nullptr); } diff --git a/src/node_blob.cc b/src/node_blob.cc index 1a69b99965f81a..c92bfb12c6b063 100644 --- a/src/node_blob.cc +++ b/src/node_blob.cc @@ -130,7 +130,7 @@ void Blob::CreatePerContextProperties(Local target, Local context, void* priv) { Realm* realm = Realm::GetCurrent(context); - realm->AddBindingData(context, target); + realm->AddBindingData(target); } Local Blob::GetConstructorTemplate(Environment* env) { @@ -535,8 +535,7 @@ void BlobBindingData::Deserialize(Local context, DCHECK_EQ(index, BaseObject::kEmbedderType); HandleScope scope(context->GetIsolate()); Realm* realm = Realm::GetCurrent(context); - BlobBindingData* binding = - realm->AddBindingData(context, holder); + BlobBindingData* binding = realm->AddBindingData(holder); CHECK_NOT_NULL(binding); } diff --git a/src/node_context_data.h b/src/node_context_data.h index 009d46c34dc4ef..1854eb879ee9ff 100644 --- a/src/node_context_data.h +++ b/src/node_context_data.h @@ -51,7 +51,6 @@ enum ContextEmbedderIndex { kEnvironment = NODE_CONTEXT_EMBEDDER_DATA_INDEX, kSandboxObject = NODE_CONTEXT_SANDBOX_OBJECT_INDEX, kAllowWasmCodeGeneration = NODE_CONTEXT_ALLOW_WASM_CODE_GENERATION_INDEX, - kBindingDataStoreIndex = NODE_BINDING_DATA_STORE_INDEX, kAllowCodeGenerationFromStrings = NODE_CONTEXT_ALLOW_CODE_GENERATION_FROM_STRINGS_INDEX, kContextifyContext = NODE_CONTEXT_CONTEXTIFY_CONTEXT_INDEX, diff --git a/src/node_file.cc b/src/node_file.cc index eb1c9b8dd90dcf..26c0754d010ee0 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -3118,7 +3118,7 @@ void BindingData::Deserialize(Local context, Realm* realm = Realm::GetCurrent(context); InternalFieldInfo* casted_info = static_cast(info); BindingData* binding = - realm->AddBindingData(context, holder, casted_info); + realm->AddBindingData(holder, casted_info); CHECK_NOT_NULL(binding); } @@ -3271,7 +3271,7 @@ static void CreatePerContextProperties(Local target, Local context, void* priv) { Realm* realm = Realm::GetCurrent(context); - realm->AddBindingData(context, target); + realm->AddBindingData(target); } BindingData* FSReqBase::binding_data() { diff --git a/src/node_http2.cc b/src/node_http2.cc index 01d0eb3418b39f..0a8f2271f25689 100644 --- a/src/node_http2.cc +++ b/src/node_http2.cc @@ -3180,7 +3180,7 @@ void Initialize(Local target, Isolate* isolate = env->isolate(); HandleScope handle_scope(isolate); - Http2State* const state = realm->AddBindingData(context, target); + Http2State* const state = realm->AddBindingData(target); if (state == nullptr) return; #define SET_STATE_TYPEDARRAY(name, field) \ diff --git a/src/node_http_parser.cc b/src/node_http_parser.cc index e1944d90557316..a12d89c3cd6cb4 100644 --- a/src/node_http_parser.cc +++ b/src/node_http_parser.cc @@ -1203,8 +1203,7 @@ void InitializeHttpParser(Local target, Realm* realm = Realm::GetCurrent(context); Environment* env = realm->env(); Isolate* isolate = env->isolate(); - BindingData* const binding_data = - realm->AddBindingData(context, target); + BindingData* const binding_data = realm->AddBindingData(target); if (binding_data == nullptr) return; Local t = NewFunctionTemplate(isolate, Parser::New); diff --git a/src/node_process_methods.cc b/src/node_process_methods.cc index eca0b343baef3a..1b68207f3e3ba6 100644 --- a/src/node_process_methods.cc +++ b/src/node_process_methods.cc @@ -566,7 +566,7 @@ void BindingData::Deserialize(Local context, v8::HandleScope scope(context->GetIsolate()); Realm* realm = Realm::GetCurrent(context); // Recreate the buffer in the constructor. - BindingData* binding = realm->AddBindingData(context, holder); + BindingData* binding = realm->AddBindingData(holder); CHECK_NOT_NULL(binding); } @@ -607,7 +607,7 @@ static void CreatePerContextProperties(Local target, Local context, void* priv) { Realm* realm = Realm::GetCurrent(context); - realm->AddBindingData(context, target); + realm->AddBindingData(target); } void RegisterExternalReferences(ExternalReferenceRegistry* registry) { diff --git a/src/node_realm-inl.h b/src/node_realm-inl.h index 748ecfe262afa2..5ccd76fc56673c 100644 --- a/src/node_realm-inl.h +++ b/src/node_realm-inl.h @@ -66,9 +66,9 @@ inline T* Realm::GetBindingData( // static template inline T* Realm::GetBindingData(v8::Local context) { - BindingDataStore* map = - static_cast(context->GetAlignedPointerFromEmbedderData( - ContextEmbedderIndex::kBindingDataStoreIndex)); + Realm* realm = GetCurrent(context); + DCHECK_NOT_NULL(realm); + BindingDataStore* map = realm->binding_data_store(); DCHECK_NOT_NULL(map); constexpr size_t binding_index = static_cast(T::binding_type_int); static_assert(binding_index < std::tuple_size_v); @@ -81,10 +81,7 @@ inline T* Realm::GetBindingData(v8::Local context) { } template -inline T* Realm::AddBindingData(v8::Local context, - v8::Local target, - Args&&... args) { - DCHECK_EQ(GetCurrent(context), this); +inline T* Realm::AddBindingData(v8::Local target, Args&&... args) { // This won't compile if T is not a BaseObject subclass. static_assert(std::is_base_of_v); // The binding data must be weak so that it won't keep the realm reachable @@ -93,15 +90,11 @@ inline T* Realm::AddBindingData(v8::Local context, // reachable throughout the lifetime of the realm. BaseObjectWeakPtr item = MakeWeakBaseObject(this, target, std::forward(args)...); - DCHECK_EQ(context->GetAlignedPointerFromEmbedderData( - ContextEmbedderIndex::kBindingDataStoreIndex), - &binding_data_store_); constexpr size_t binding_index = static_cast(T::binding_type_int); static_assert(binding_index < std::tuple_size_v); - // Should not insert the binding twice. + // Each slot is expected to be assigned only once. CHECK(!binding_data_store_[binding_index]); binding_data_store_[binding_index] = item; - DCHECK_EQ(GetBindingData(context), item.get()); return item.get(); } diff --git a/src/node_realm.h b/src/node_realm.h index 6cca9d5041d3fb..a75cd610692183 100644 --- a/src/node_realm.h +++ b/src/node_realm.h @@ -93,9 +93,7 @@ class Realm : public MemoryRetainer { // this scope can access the created T* object using // GetBindingData(args) later. template - T* AddBindingData(v8::Local context, - v8::Local target, - Args&&... args); + T* AddBindingData(v8::Local target, Args&&... args); template static inline T* GetBindingData(const v8::PropertyCallbackInfo& info); template diff --git a/src/node_snapshotable.cc b/src/node_snapshotable.cc index 16f405ebf7a6ff..e2d98eb3139740 100644 --- a/src/node_snapshotable.cc +++ b/src/node_snapshotable.cc @@ -1357,7 +1357,7 @@ void BindingData::Deserialize(Local context, // Recreate the buffer in the constructor. InternalFieldInfo* casted_info = static_cast(info); BindingData* binding = - realm->AddBindingData(context, holder, casted_info); + realm->AddBindingData(holder, casted_info); CHECK_NOT_NULL(binding); } @@ -1371,7 +1371,7 @@ void CreatePerContextProperties(Local target, Local context, void* priv) { Realm* realm = Realm::GetCurrent(context); - realm->AddBindingData(context, target); + realm->AddBindingData(target); } void CreatePerIsolateProperties(IsolateData* isolate_data, diff --git a/src/node_url.cc b/src/node_url.cc index 483fbb04a47f34..35a7855035a2f1 100644 --- a/src/node_url.cc +++ b/src/node_url.cc @@ -67,7 +67,7 @@ void BindingData::Deserialize(v8::Local context, DCHECK_EQ(index, BaseObject::kEmbedderType); v8::HandleScope scope(context->GetIsolate()); Realm* realm = Realm::GetCurrent(context); - BindingData* binding = realm->AddBindingData(context, holder); + BindingData* binding = realm->AddBindingData(holder); CHECK_NOT_NULL(binding); } @@ -374,7 +374,7 @@ void BindingData::CreatePerContextProperties(Local target, Local context, void* priv) { Realm* realm = Realm::GetCurrent(context); - realm->AddBindingData(context, target); + realm->AddBindingData(target); } void BindingData::RegisterExternalReferences( diff --git a/src/node_v8.cc b/src/node_v8.cc index 308d851ef62278..a5e91f5b8ca624 100644 --- a/src/node_v8.cc +++ b/src/node_v8.cc @@ -158,7 +158,7 @@ void BindingData::Deserialize(Local context, // Recreate the buffer in the constructor. InternalFieldInfo* casted_info = static_cast(info); BindingData* binding = - realm->AddBindingData(context, holder, casted_info); + realm->AddBindingData(holder, casted_info); CHECK_NOT_NULL(binding); } @@ -422,8 +422,7 @@ void Initialize(Local target, void* priv) { Realm* realm = Realm::GetCurrent(context); Environment* env = realm->env(); - BindingData* const binding_data = - realm->AddBindingData(context, target); + BindingData* const binding_data = realm->AddBindingData(target); if (binding_data == nullptr) return; SetMethodNoSideEffect( diff --git a/src/quic/bindingdata.cc b/src/quic/bindingdata.cc index 13baa23c54250b..f24e3c3ed7b09f 100644 --- a/src/quic/bindingdata.cc +++ b/src/quic/bindingdata.cc @@ -59,8 +59,7 @@ void BindingData::DecreaseAllocatedSize(size_t size) { void BindingData::Initialize(Environment* env, Local target) { SetMethod(env->context(), target, "setCallbacks", SetCallbacks); SetMethod(env->context(), target, "flushPacketFreelist", FlushPacketFreelist); - Realm::GetCurrent(env->context()) - ->AddBindingData(env->context(), target); + Realm::GetCurrent(env->context())->AddBindingData(target); } void BindingData::RegisterExternalReferences( diff --git a/src/timers.cc b/src/timers.cc index 59b4770fa219e8..27fa18ec4d3f86 100644 --- a/src/timers.cc +++ b/src/timers.cc @@ -108,7 +108,7 @@ void BindingData::Deserialize(Local context, v8::HandleScope scope(context->GetIsolate()); Realm* realm = Realm::GetCurrent(context); // Recreate the buffer in the constructor. - BindingData* binding = realm->AddBindingData(context, holder); + BindingData* binding = realm->AddBindingData(holder); CHECK_NOT_NULL(binding); } @@ -151,8 +151,7 @@ void BindingData::CreatePerContextProperties(Local target, void* priv) { Realm* realm = Realm::GetCurrent(context); Environment* env = realm->env(); - BindingData* const binding_data = - realm->AddBindingData(context, target); + BindingData* const binding_data = realm->AddBindingData(target); if (binding_data == nullptr) return; // TODO(joyeecheung): move these into BindingData.