|
31 | 31 | #include "node_context_data.h"
|
32 | 32 | #include "node_internals.h"
|
33 | 33 | #include "node_perf_common.h"
|
| 34 | +#include "node_realm-inl.h" |
34 | 35 | #include "util-inl.h"
|
35 | 36 | #include "uv.h"
|
36 | 37 | #include "v8.h"
|
@@ -177,16 +178,7 @@ inline Environment* Environment::GetCurrent(v8::Isolate* isolate) {
|
177 | 178 | }
|
178 | 179 |
|
179 | 180 | inline Environment* Environment::GetCurrent(v8::Local<v8::Context> context) {
|
180 |
| - if (UNLIKELY(context.IsEmpty())) { |
181 |
| - return nullptr; |
182 |
| - } |
183 |
| - if (UNLIKELY(context->GetNumberOfEmbedderDataFields() <= |
184 |
| - ContextEmbedderIndex::kContextTag)) { |
185 |
| - return nullptr; |
186 |
| - } |
187 |
| - if (UNLIKELY(context->GetAlignedPointerFromEmbedderData( |
188 |
| - ContextEmbedderIndex::kContextTag) != |
189 |
| - Environment::kNodeContextTagPtr)) { |
| 181 | + if (UNLIKELY(!ContextEmbedderTag::IsNodeContext(context))) { |
190 | 182 | return nullptr;
|
191 | 183 | }
|
192 | 184 | return static_cast<Environment*>(
|
@@ -623,11 +615,13 @@ inline void Environment::set_can_call_into_js(bool can_call_into_js) {
|
623 | 615 | }
|
624 | 616 |
|
625 | 617 | inline bool Environment::has_run_bootstrapping_code() const {
|
626 |
| - return has_run_bootstrapping_code_; |
| 618 | + return principal_realm_->has_run_bootstrapping_code(); |
627 | 619 | }
|
628 | 620 |
|
629 | 621 | inline void Environment::DoneBootstrapping() {
|
630 |
| - has_run_bootstrapping_code_ = true; |
| 622 | + CHECK(has_run_bootstrapping_code()); |
| 623 | + // TODO(legendecas): distinguish base objects with realms. |
| 624 | + |
631 | 625 | // This adjusts the return value of base_object_created_after_bootstrap() so
|
632 | 626 | // that tests that check the count do not have to account for internally
|
633 | 627 | // created BaseObjects.
|
@@ -922,16 +916,22 @@ void Environment::set_process_exit_handler(
|
922 | 916 |
|
923 | 917 | #define V(PropertyName, TypeName) \
|
924 | 918 | inline v8::Local<TypeName> Environment::PropertyName() const { \
|
925 |
| - return PersistentToLocal::Strong(PropertyName##_); \ |
| 919 | + DCHECK_NOT_NULL(principal_realm_); \ |
| 920 | + return principal_realm_->PropertyName(); \ |
926 | 921 | } \
|
927 | 922 | inline void Environment::set_##PropertyName(v8::Local<TypeName> value) { \
|
928 |
| - PropertyName##_.Reset(isolate(), value); \ |
| 923 | + DCHECK_NOT_NULL(principal_realm_); \ |
| 924 | + principal_realm_->set_##PropertyName(value); \ |
929 | 925 | }
|
930 |
| - ENVIRONMENT_STRONG_PERSISTENT_VALUES(V) |
| 926 | + PER_REALM_STRONG_PERSISTENT_VALUES(V) |
931 | 927 | #undef V
|
932 | 928 |
|
933 | 929 | v8::Local<v8::Context> Environment::context() const {
|
934 |
| - return PersistentToLocal::Strong(context_); |
| 930 | + return principal_realm()->context(); |
| 931 | +} |
| 932 | + |
| 933 | +Realm* Environment::principal_realm() const { |
| 934 | + return principal_realm_.get(); |
935 | 935 | }
|
936 | 936 |
|
937 | 937 | } // namespace node
|
|
0 commit comments