Skip to content

Commit e0fdb7b

Browse files
joyeecheungRafaelGSS
authored andcommitted
src: remove ContextEmbedderIndex::kBindingDataStoreIndex
We can now get the binding data through the reference to the realm directly, so remove it from the context embedder data slot. PR-URL: #48836 Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
1 parent 5173c55 commit e0fdb7b

16 files changed

+26
-48
lines changed

src/README.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -574,8 +574,7 @@ void InitializeHttpParser(Local<Object> target,
574574
Local<Context> context,
575575
void* priv) {
576576
Realm* realm = Realm::GetCurrent(context);
577-
BindingData* const binding_data =
578-
realm->AddBindingData<BindingData>(context, target);
577+
BindingData* const binding_data = realm->AddBindingData<BindingData>(target);
579578
if (binding_data == nullptr) return;
580579

581580
Local<FunctionTemplate> t = NewFunctionTemplate(realm->isolate(), Parser::New);

src/encoding_binding.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ void BindingData::Deserialize(Local<Context> context,
7878
// Recreate the buffer in the constructor.
7979
InternalFieldInfo* casted_info = static_cast<InternalFieldInfo*>(info);
8080
BindingData* binding =
81-
realm->AddBindingData<BindingData>(context, holder, casted_info);
81+
realm->AddBindingData<BindingData>(holder, casted_info);
8282
CHECK_NOT_NULL(binding);
8383
}
8484

@@ -232,7 +232,7 @@ void BindingData::CreatePerContextProperties(Local<Object> target,
232232
Local<Context> context,
233233
void* priv) {
234234
Realm* realm = Realm::GetCurrent(context);
235-
realm->AddBindingData<BindingData>(context, target);
235+
realm->AddBindingData<BindingData>(target);
236236
}
237237

238238
void BindingData::RegisterTimerExternalReferences(

src/env.cc

-6
Original file line numberDiff line numberDiff line change
@@ -572,10 +572,6 @@ void Environment::AssignToContext(Local<v8::Context> context,
572572
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment,
573573
this);
574574
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, realm);
575-
// Used to retrieve bindings
576-
context->SetAlignedPointerInEmbedderData(
577-
ContextEmbedderIndex::kBindingDataStoreIndex,
578-
realm != nullptr ? realm->binding_data_store() : nullptr);
579575

580576
// ContextifyContexts will update this to a pointer to the native object.
581577
context->SetAlignedPointerInEmbedderData(
@@ -598,8 +594,6 @@ void Environment::UnassignFromContext(Local<v8::Context> context) {
598594
nullptr);
599595
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm,
600596
nullptr);
601-
context->SetAlignedPointerInEmbedderData(
602-
ContextEmbedderIndex::kBindingDataStoreIndex, nullptr);
603597
context->SetAlignedPointerInEmbedderData(
604598
ContextEmbedderIndex::kContextifyContext, nullptr);
605599
}

src/node_blob.cc

+2-3
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ void Blob::CreatePerContextProperties(Local<Object> target,
130130
Local<Context> context,
131131
void* priv) {
132132
Realm* realm = Realm::GetCurrent(context);
133-
realm->AddBindingData<BlobBindingData>(context, target);
133+
realm->AddBindingData<BlobBindingData>(target);
134134
}
135135

136136
Local<FunctionTemplate> Blob::GetConstructorTemplate(Environment* env) {
@@ -535,8 +535,7 @@ void BlobBindingData::Deserialize(Local<Context> context,
535535
DCHECK_EQ(index, BaseObject::kEmbedderType);
536536
HandleScope scope(context->GetIsolate());
537537
Realm* realm = Realm::GetCurrent(context);
538-
BlobBindingData* binding =
539-
realm->AddBindingData<BlobBindingData>(context, holder);
538+
BlobBindingData* binding = realm->AddBindingData<BlobBindingData>(holder);
540539
CHECK_NOT_NULL(binding);
541540
}
542541

src/node_context_data.h

-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ enum ContextEmbedderIndex {
5151
kEnvironment = NODE_CONTEXT_EMBEDDER_DATA_INDEX,
5252
kSandboxObject = NODE_CONTEXT_SANDBOX_OBJECT_INDEX,
5353
kAllowWasmCodeGeneration = NODE_CONTEXT_ALLOW_WASM_CODE_GENERATION_INDEX,
54-
kBindingDataStoreIndex = NODE_BINDING_DATA_STORE_INDEX,
5554
kAllowCodeGenerationFromStrings =
5655
NODE_CONTEXT_ALLOW_CODE_GENERATION_FROM_STRINGS_INDEX,
5756
kContextifyContext = NODE_CONTEXT_CONTEXTIFY_CONTEXT_INDEX,

src/node_file.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -3155,7 +3155,7 @@ void BindingData::Deserialize(Local<Context> context,
31553155
Realm* realm = Realm::GetCurrent(context);
31563156
InternalFieldInfo* casted_info = static_cast<InternalFieldInfo*>(info);
31573157
BindingData* binding =
3158-
realm->AddBindingData<BindingData>(context, holder, casted_info);
3158+
realm->AddBindingData<BindingData>(holder, casted_info);
31593159
CHECK_NOT_NULL(binding);
31603160
}
31613161

@@ -3308,7 +3308,7 @@ static void CreatePerContextProperties(Local<Object> target,
33083308
Local<Context> context,
33093309
void* priv) {
33103310
Realm* realm = Realm::GetCurrent(context);
3311-
realm->AddBindingData<BindingData>(context, target);
3311+
realm->AddBindingData<BindingData>(target);
33123312
}
33133313

33143314
BindingData* FSReqBase::binding_data() {

src/node_http2.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3180,7 +3180,7 @@ void Initialize(Local<Object> target,
31803180
Isolate* isolate = env->isolate();
31813181
HandleScope handle_scope(isolate);
31823182

3183-
Http2State* const state = realm->AddBindingData<Http2State>(context, target);
3183+
Http2State* const state = realm->AddBindingData<Http2State>(target);
31843184
if (state == nullptr) return;
31853185

31863186
#define SET_STATE_TYPEDARRAY(name, field) \

src/node_http_parser.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -1203,8 +1203,7 @@ void InitializeHttpParser(Local<Object> target,
12031203
Realm* realm = Realm::GetCurrent(context);
12041204
Environment* env = realm->env();
12051205
Isolate* isolate = env->isolate();
1206-
BindingData* const binding_data =
1207-
realm->AddBindingData<BindingData>(context, target);
1206+
BindingData* const binding_data = realm->AddBindingData<BindingData>(target);
12081207
if (binding_data == nullptr) return;
12091208

12101209
Local<FunctionTemplate> t = NewFunctionTemplate(isolate, Parser::New);

src/node_process_methods.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ void BindingData::Deserialize(Local<Context> context,
566566
v8::HandleScope scope(context->GetIsolate());
567567
Realm* realm = Realm::GetCurrent(context);
568568
// Recreate the buffer in the constructor.
569-
BindingData* binding = realm->AddBindingData<BindingData>(context, holder);
569+
BindingData* binding = realm->AddBindingData<BindingData>(holder);
570570
CHECK_NOT_NULL(binding);
571571
}
572572

@@ -607,7 +607,7 @@ static void CreatePerContextProperties(Local<Object> target,
607607
Local<Context> context,
608608
void* priv) {
609609
Realm* realm = Realm::GetCurrent(context);
610-
realm->AddBindingData<BindingData>(context, target);
610+
realm->AddBindingData<BindingData>(target);
611611
}
612612

613613
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {

src/node_realm-inl.h

+5-12
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ inline T* Realm::GetBindingData(
6666
// static
6767
template <typename T>
6868
inline T* Realm::GetBindingData(v8::Local<v8::Context> context) {
69-
BindingDataStore* map =
70-
static_cast<BindingDataStore*>(context->GetAlignedPointerFromEmbedderData(
71-
ContextEmbedderIndex::kBindingDataStoreIndex));
69+
Realm* realm = GetCurrent(context);
70+
DCHECK_NOT_NULL(realm);
71+
BindingDataStore* map = realm->binding_data_store();
7272
DCHECK_NOT_NULL(map);
7373
constexpr size_t binding_index = static_cast<size_t>(T::binding_type_int);
7474
static_assert(binding_index < std::tuple_size_v<BindingDataStore>);
@@ -81,10 +81,7 @@ inline T* Realm::GetBindingData(v8::Local<v8::Context> context) {
8181
}
8282

8383
template <typename T, typename... Args>
84-
inline T* Realm::AddBindingData(v8::Local<v8::Context> context,
85-
v8::Local<v8::Object> target,
86-
Args&&... args) {
87-
DCHECK_EQ(GetCurrent(context), this);
84+
inline T* Realm::AddBindingData(v8::Local<v8::Object> target, Args&&... args) {
8885
// This won't compile if T is not a BaseObject subclass.
8986
static_assert(std::is_base_of_v<BaseObject, T>);
9087
// 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<v8::Context> context,
9390
// reachable throughout the lifetime of the realm.
9491
BaseObjectWeakPtr<T> item =
9592
MakeWeakBaseObject<T>(this, target, std::forward<Args>(args)...);
96-
DCHECK_EQ(context->GetAlignedPointerFromEmbedderData(
97-
ContextEmbedderIndex::kBindingDataStoreIndex),
98-
&binding_data_store_);
9993
constexpr size_t binding_index = static_cast<size_t>(T::binding_type_int);
10094
static_assert(binding_index < std::tuple_size_v<BindingDataStore>);
101-
// Should not insert the binding twice.
95+
// Each slot is expected to be assigned only once.
10296
CHECK(!binding_data_store_[binding_index]);
10397
binding_data_store_[binding_index] = item;
104-
DCHECK_EQ(GetBindingData<T>(context), item.get());
10598
return item.get();
10699
}
107100

src/node_realm.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,7 @@ class Realm : public MemoryRetainer {
9393
// this scope can access the created T* object using
9494
// GetBindingData<T>(args) later.
9595
template <typename T, typename... Args>
96-
T* AddBindingData(v8::Local<v8::Context> context,
97-
v8::Local<v8::Object> target,
98-
Args&&... args);
96+
T* AddBindingData(v8::Local<v8::Object> target, Args&&... args);
9997
template <typename T, typename U>
10098
static inline T* GetBindingData(const v8::PropertyCallbackInfo<U>& info);
10199
template <typename T>

src/node_snapshotable.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,7 @@ void BindingData::Deserialize(Local<Context> context,
13551355
// Recreate the buffer in the constructor.
13561356
InternalFieldInfo* casted_info = static_cast<InternalFieldInfo*>(info);
13571357
BindingData* binding =
1358-
realm->AddBindingData<BindingData>(context, holder, casted_info);
1358+
realm->AddBindingData<BindingData>(holder, casted_info);
13591359
CHECK_NOT_NULL(binding);
13601360
}
13611361

@@ -1369,7 +1369,7 @@ void CreatePerContextProperties(Local<Object> target,
13691369
Local<Context> context,
13701370
void* priv) {
13711371
Realm* realm = Realm::GetCurrent(context);
1372-
realm->AddBindingData<BindingData>(context, target);
1372+
realm->AddBindingData<BindingData>(target);
13731373
}
13741374

13751375
void CreatePerIsolateProperties(IsolateData* isolate_data,

src/node_url.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void BindingData::Deserialize(v8::Local<v8::Context> context,
6767
DCHECK_EQ(index, BaseObject::kEmbedderType);
6868
v8::HandleScope scope(context->GetIsolate());
6969
Realm* realm = Realm::GetCurrent(context);
70-
BindingData* binding = realm->AddBindingData<BindingData>(context, holder);
70+
BindingData* binding = realm->AddBindingData<BindingData>(holder);
7171
CHECK_NOT_NULL(binding);
7272
}
7373

@@ -374,7 +374,7 @@ void BindingData::CreatePerContextProperties(Local<Object> target,
374374
Local<Context> context,
375375
void* priv) {
376376
Realm* realm = Realm::GetCurrent(context);
377-
realm->AddBindingData<BindingData>(context, target);
377+
realm->AddBindingData<BindingData>(target);
378378
}
379379

380380
void BindingData::RegisterExternalReferences(

src/node_v8.cc

+2-3
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ void BindingData::Deserialize(Local<Context> context,
158158
// Recreate the buffer in the constructor.
159159
InternalFieldInfo* casted_info = static_cast<InternalFieldInfo*>(info);
160160
BindingData* binding =
161-
realm->AddBindingData<BindingData>(context, holder, casted_info);
161+
realm->AddBindingData<BindingData>(holder, casted_info);
162162
CHECK_NOT_NULL(binding);
163163
}
164164

@@ -422,8 +422,7 @@ void Initialize(Local<Object> target,
422422
void* priv) {
423423
Realm* realm = Realm::GetCurrent(context);
424424
Environment* env = realm->env();
425-
BindingData* const binding_data =
426-
realm->AddBindingData<BindingData>(context, target);
425+
BindingData* const binding_data = realm->AddBindingData<BindingData>(target);
427426
if (binding_data == nullptr) return;
428427

429428
SetMethodNoSideEffect(

src/quic/bindingdata.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ void BindingData::DecreaseAllocatedSize(size_t size) {
5959
void BindingData::Initialize(Environment* env, Local<Object> target) {
6060
SetMethod(env->context(), target, "setCallbacks", SetCallbacks);
6161
SetMethod(env->context(), target, "flushPacketFreelist", FlushPacketFreelist);
62-
Realm::GetCurrent(env->context())
63-
->AddBindingData<BindingData>(env->context(), target);
62+
Realm::GetCurrent(env->context())->AddBindingData<BindingData>(target);
6463
}
6564

6665
void BindingData::RegisterExternalReferences(

src/timers.cc

+2-3
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ void BindingData::Deserialize(Local<Context> context,
108108
v8::HandleScope scope(context->GetIsolate());
109109
Realm* realm = Realm::GetCurrent(context);
110110
// Recreate the buffer in the constructor.
111-
BindingData* binding = realm->AddBindingData<BindingData>(context, holder);
111+
BindingData* binding = realm->AddBindingData<BindingData>(holder);
112112
CHECK_NOT_NULL(binding);
113113
}
114114

@@ -151,8 +151,7 @@ void BindingData::CreatePerContextProperties(Local<Object> target,
151151
void* priv) {
152152
Realm* realm = Realm::GetCurrent(context);
153153
Environment* env = realm->env();
154-
BindingData* const binding_data =
155-
realm->AddBindingData<BindingData>(context, target);
154+
BindingData* const binding_data = realm->AddBindingData<BindingData>(target);
156155
if (binding_data == nullptr) return;
157156

158157
// TODO(joyeecheung): move these into BindingData.

0 commit comments

Comments
 (0)