Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a7f3bc0

Browse filesBrowse files
legendecasdanielleadams
authored andcommitted
src: introduce node::Realm
To distinguish per-context values from the node::Environment, split those values to a new node::Realm structure and consolidate bootstrapping methods with it. PR-URL: #44179 Refs: #42528 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent b11616b commit a7f3bc0
Copy full SHA for a7f3bc0
Expand file treeCollapse file tree

21 files changed

+1142
-830
lines changed
Open diff view settings
Collapse file

‎node.gyp‎

Copy file name to clipboardExpand all lines: node.gyp
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@
525525
'src/node_process_events.cc',
526526
'src/node_process_methods.cc',
527527
'src/node_process_object.cc',
528+
'src/node_realm.cc',
528529
'src/node_report.cc',
529530
'src/node_report_module.cc',
530531
'src/node_report_utils.cc',
@@ -585,6 +586,7 @@
585586
'src/connection_wrap.h',
586587
'src/debug_utils.h',
587588
'src/debug_utils-inl.h',
589+
'src/env_properties.h',
588590
'src/env.h',
589591
'src/env-inl.h',
590592
'src/handle_wrap.h',
@@ -632,6 +634,8 @@
632634
'src/node_platform.h',
633635
'src/node_process.h',
634636
'src/node_process-inl.h',
637+
'src/node_realm.h',
638+
'src/node_realm-inl.h',
635639
'src/node_report.h',
636640
'src/node_revert.h',
637641
'src/node_root_certs.h',
Collapse file

‎src/api/environment.cc‎

Copy file name to clipboardExpand all lines: src/api/environment.cc
+7-4Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "node_internals.h"
66
#include "node_options-inl.h"
77
#include "node_platform.h"
8+
#include "node_realm-inl.h"
89
#include "node_shadow_realm.h"
910
#include "node_v8_platform-inl.h"
1011
#include "node_wasm_web_api.h"
@@ -378,7 +379,7 @@ Environment* CreateEnvironment(
378379
}
379380
#endif
380381

381-
if (env->RunBootstrapping().IsEmpty()) {
382+
if (env->principal_realm()->RunBootstrapping().IsEmpty()) {
382383
FreeEnvironment(env);
383384
return nullptr;
384385
}
@@ -453,11 +454,13 @@ MaybeLocal<Value> LoadEnvironment(
453454
builtins::BuiltinLoader::Add(
454455
name.c_str(), UnionBytes(**main_utf16, main_utf16->length()));
455456
env->set_main_utf16(std::move(main_utf16));
457+
Realm* realm = env->principal_realm();
458+
456459
// Arguments must match the parameters specified in
457460
// BuiltinLoader::LookupAndCompile().
458-
std::vector<Local<Value>> args = {env->process_object(),
459-
env->builtin_module_require()};
460-
return ExecuteBootstrapper(env, name.c_str(), &args);
461+
std::vector<Local<Value>> args = {realm->process_object(),
462+
realm->builtin_module_require()};
463+
return realm->ExecuteBootstrapper(name.c_str(), &args);
461464
});
462465
}
463466

Collapse file

‎src/base_object-inl.h‎

Copy file name to clipboardExpand all lines: src/base_object-inl.h
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@
3232

3333
namespace node {
3434

35+
// static
36+
v8::Local<v8::FunctionTemplate> BaseObject::GetConstructorTemplate(
37+
Environment* env) {
38+
return BaseObject::GetConstructorTemplate(env->isolate_data());
39+
}
40+
3541
void BaseObject::Detach() {
3642
CHECK_GT(pointer_data()->strong_ptr_count, 0);
3743
pointer_data()->is_detached = true;
Collapse file

‎src/base_object.h‎

Copy file name to clipboardExpand all lines: src/base_object.h
+4-1Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
namespace node {
3232

3333
class Environment;
34+
class IsolateData;
3435
template <typename T, bool kIsWeak>
3536
class BaseObjectPtrImpl;
3637

@@ -113,8 +114,10 @@ class BaseObject : public MemoryRetainer {
113114
// a BaseObjectPtr to this object.
114115
inline void Detach();
115116

116-
static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
117+
static inline v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
117118
Environment* env);
119+
static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
120+
IsolateData* isolate_data);
118121

119122
// Interface for transferring BaseObject instances using the .postMessage()
120123
// method of MessagePorts (and, by extension, Workers).
Collapse file

‎src/env-inl.h‎

Copy file name to clipboardExpand all lines: src/env-inl.h
+20-17Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "node_context_data.h"
3232
#include "node_internals.h"
3333
#include "node_perf_common.h"
34+
#include "node_realm-inl.h"
3435
#include "util-inl.h"
3536
#include "uv.h"
3637
#include "v8.h"
@@ -614,15 +615,7 @@ inline void Environment::set_can_call_into_js(bool can_call_into_js) {
614615
}
615616

616617
inline bool Environment::has_run_bootstrapping_code() const {
617-
return has_run_bootstrapping_code_;
618-
}
619-
620-
inline void Environment::DoneBootstrapping() {
621-
has_run_bootstrapping_code_ = true;
622-
// This adjusts the return value of base_object_created_after_bootstrap() so
623-
// that tests that check the count do not have to account for internally
624-
// created BaseObjects.
625-
base_object_created_by_bootstrap_ = base_object_count_;
618+
return principal_realm_->has_run_bootstrapping_code();
626619
}
627620

628621
inline bool Environment::has_serialized_options() const {
@@ -805,14 +798,18 @@ void Environment::modify_base_object_count(int64_t delta) {
805798
base_object_count_ += delta;
806799
}
807800

808-
int64_t Environment::base_object_created_after_bootstrap() const {
809-
return base_object_count_ - base_object_created_by_bootstrap_;
810-
}
811-
812801
int64_t Environment::base_object_count() const {
813802
return base_object_count_;
814803
}
815804

805+
inline void Environment::set_base_object_created_by_bootstrap(int64_t count) {
806+
base_object_created_by_bootstrap_ = base_object_count_;
807+
}
808+
809+
int64_t Environment::base_object_created_after_bootstrap() const {
810+
return base_object_count_ - base_object_created_by_bootstrap_;
811+
}
812+
816813
void Environment::set_main_utf16(std::unique_ptr<v8::String::Value> str) {
817814
CHECK(!main_utf16_);
818815
main_utf16_ = std::move(str);
@@ -877,16 +874,22 @@ void Environment::set_process_exit_handler(
877874

878875
#define V(PropertyName, TypeName) \
879876
inline v8::Local<TypeName> Environment::PropertyName() const { \
880-
return PersistentToLocal::Strong(PropertyName##_); \
877+
DCHECK_NOT_NULL(principal_realm_); \
878+
return principal_realm_->PropertyName(); \
881879
} \
882880
inline void Environment::set_##PropertyName(v8::Local<TypeName> value) { \
883-
PropertyName##_.Reset(isolate(), value); \
881+
DCHECK_NOT_NULL(principal_realm_); \
882+
principal_realm_->set_##PropertyName(value); \
884883
}
885-
ENVIRONMENT_STRONG_PERSISTENT_VALUES(V)
884+
PER_REALM_STRONG_PERSISTENT_VALUES(V)
886885
#undef V
887886

888887
v8::Local<v8::Context> Environment::context() const {
889-
return PersistentToLocal::Strong(context_);
888+
return principal_realm()->context();
889+
}
890+
891+
Realm* Environment::principal_realm() const {
892+
return principal_realm_.get();
890893
}
891894

892895
inline void Environment::set_heap_snapshot_near_heap_limit(uint32_t limit) {

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.