Skip to content

Commit 7219670

Browse files
joyeecheungpluris
authored and
pluris
committed
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: nodejs#48836 Reviewed-By: Chengzhong Wu <[email protected]>
1 parent 97da160 commit 7219670

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
@@ -619,10 +619,6 @@ void Environment::AssignToContext(Local<v8::Context> context,
619619
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment,
620620
this);
621621
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, realm);
622-
// Used to retrieve bindings
623-
context->SetAlignedPointerInEmbedderData(
624-
ContextEmbedderIndex::kBindingDataStoreIndex,
625-
realm != nullptr ? realm->binding_data_store() : nullptr);
626622

627623
// ContextifyContexts will update this to a pointer to the native object.
628624
context->SetAlignedPointerInEmbedderData(
@@ -645,8 +641,6 @@ void Environment::UnassignFromContext(Local<v8::Context> context) {
645641
nullptr);
646642
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm,
647643
nullptr);
648-
context->SetAlignedPointerInEmbedderData(
649-
ContextEmbedderIndex::kBindingDataStoreIndex, nullptr);
650644
context->SetAlignedPointerInEmbedderData(
651645
ContextEmbedderIndex::kContextifyContext, nullptr);
652646
}

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
@@ -3118,7 +3118,7 @@ void BindingData::Deserialize(Local<Context> context,
31183118
Realm* realm = Realm::GetCurrent(context);
31193119
InternalFieldInfo* casted_info = static_cast<InternalFieldInfo*>(info);
31203120
BindingData* binding =
3121-
realm->AddBindingData<BindingData>(context, holder, casted_info);
3121+
realm->AddBindingData<BindingData>(holder, casted_info);
31223122
CHECK_NOT_NULL(binding);
31233123
}
31243124

@@ -3271,7 +3271,7 @@ static void CreatePerContextProperties(Local<Object> target,
32713271
Local<Context> context,
32723272
void* priv) {
32733273
Realm* realm = Realm::GetCurrent(context);
3274-
realm->AddBindingData<BindingData>(context, target);
3274+
realm->AddBindingData<BindingData>(target);
32753275
}
32763276

32773277
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
@@ -1357,7 +1357,7 @@ void BindingData::Deserialize(Local<Context> context,
13571357
// Recreate the buffer in the constructor.
13581358
InternalFieldInfo* casted_info = static_cast<InternalFieldInfo*>(info);
13591359
BindingData* binding =
1360-
realm->AddBindingData<BindingData>(context, holder, casted_info);
1360+
realm->AddBindingData<BindingData>(holder, casted_info);
13611361
CHECK_NOT_NULL(binding);
13621362
}
13631363

@@ -1371,7 +1371,7 @@ void CreatePerContextProperties(Local<Object> target,
13711371
Local<Context> context,
13721372
void* priv) {
13731373
Realm* realm = Realm::GetCurrent(context);
1374-
realm->AddBindingData<BindingData>(context, target);
1374+
realm->AddBindingData<BindingData>(target);
13751375
}
13761376

13771377
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)