diff --git a/src/node_file.cc b/src/node_file.cc index bde29316888042..a94792e7e96b1f 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -265,17 +265,17 @@ FileHandle* FileHandle::New(BindingData* binding_data, } void FileHandle::New(const FunctionCallbackInfo& args) { - BindingData* binding_data = Realm::GetBindingData(args); - Environment* env = binding_data->env(); CHECK(args.IsConstructCall()); CHECK(args[0]->IsInt32()); + Realm* realm = Realm::GetCurrent(args); + BindingData* binding_data = realm->GetBindingData(); std::optional maybeOffset = std::nullopt; std::optional maybeLength = std::nullopt; if (args[1]->IsNumber()) - maybeOffset = args[1]->IntegerValue(env->context()).FromJust(); + maybeOffset = args[1]->IntegerValue(realm->context()).FromJust(); if (args[2]->IsNumber()) - maybeLength = args[2]->IntegerValue(env->context()).FromJust(); + maybeLength = args[2]->IntegerValue(realm->context()).FromJust(); FileHandle::New(binding_data, args[0].As()->Value(), @@ -1143,13 +1143,14 @@ static void InternalModuleStat(const FunctionCallbackInfo& args) { } static void Stat(const FunctionCallbackInfo& args) { - BindingData* binding_data = Realm::GetBindingData(args); - Environment* env = binding_data->env(); + Realm* realm = Realm::GetCurrent(args); + BindingData* binding_data = realm->GetBindingData(); + Environment* env = realm->env(); const int argc = args.Length(); CHECK_GE(argc, 2); - BufferValue path(env->isolate(), args[0]); + BufferValue path(realm->isolate(), args[0]); CHECK_NOT_NULL(*path); THROW_IF_INSUFFICIENT_PERMISSIONS( env, permission::PermissionScope::kFileSystemRead, path.ToStringView()); @@ -1178,13 +1179,14 @@ static void Stat(const FunctionCallbackInfo& args) { } static void LStat(const FunctionCallbackInfo& args) { - BindingData* binding_data = Realm::GetBindingData(args); - Environment* env = binding_data->env(); + Realm* realm = Realm::GetCurrent(args); + BindingData* binding_data = realm->GetBindingData(); + Environment* env = realm->env(); const int argc = args.Length(); CHECK_GE(argc, 3); - BufferValue path(env->isolate(), args[0]); + BufferValue path(realm->isolate(), args[0]); CHECK_NOT_NULL(*path); bool use_bigint = args[1]->IsTrue(); @@ -1212,8 +1214,9 @@ static void LStat(const FunctionCallbackInfo& args) { } static void FStat(const FunctionCallbackInfo& args) { - BindingData* binding_data = Realm::GetBindingData(args); - Environment* env = binding_data->env(); + Realm* realm = Realm::GetCurrent(args); + BindingData* binding_data = realm->GetBindingData(); + Environment* env = realm->env(); const int argc = args.Length(); CHECK_GE(argc, 2); @@ -1244,13 +1247,14 @@ static void FStat(const FunctionCallbackInfo& args) { } static void StatFs(const FunctionCallbackInfo& args) { - BindingData* binding_data = Realm::GetBindingData(args); - Environment* env = binding_data->env(); + Realm* realm = Realm::GetCurrent(args); + BindingData* binding_data = realm->GetBindingData(); + Environment* env = realm->env(); const int argc = args.Length(); CHECK_GE(argc, 2); - BufferValue path(env->isolate(), args[0]); + BufferValue path(realm->isolate(), args[0]); CHECK_NOT_NULL(*path); THROW_IF_INSUFFICIENT_PERMISSIONS( env, permission::PermissionScope::kFileSystemRead, path.ToStringView()); diff --git a/src/node_realm-inl.h b/src/node_realm-inl.h index 5ccd76fc56673c..fe20ac2b2fea3a 100644 --- a/src/node_realm-inl.h +++ b/src/node_realm-inl.h @@ -67,16 +67,17 @@ inline T* Realm::GetBindingData( template inline T* Realm::GetBindingData(v8::Local context) { Realm* realm = GetCurrent(context); - DCHECK_NOT_NULL(realm); - BindingDataStore* map = realm->binding_data_store(); - DCHECK_NOT_NULL(map); + return realm->GetBindingData(); +} + +template +inline T* Realm::GetBindingData() { constexpr size_t binding_index = static_cast(T::binding_type_int); static_assert(binding_index < std::tuple_size_v); - auto ptr = (*map)[binding_index]; + auto ptr = binding_data_store_[binding_index]; if (UNLIKELY(!ptr)) return nullptr; T* result = static_cast(ptr.get()); DCHECK_NOT_NULL(result); - DCHECK_EQ(result->realm(), GetCurrent(context)); return result; }