diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2019-04-10 16:31:52 +0800 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2019-04-13 17:53:25 +0800 |
commit | 3da36d0e94987dc6594fdffc3678d3f970cdac75 (patch) | |
tree | 78aea15a41bd5da3861bf1b58b0cd891a8b0fd71 /src/api | |
parent | dfd7e994258a36f3941c74295a8c037cb4850418 (diff) | |
download | android-node-v8-3da36d0e94987dc6594fdffc3678d3f970cdac75.tar.gz android-node-v8-3da36d0e94987dc6594fdffc3678d3f970cdac75.tar.bz2 android-node-v8-3da36d0e94987dc6594fdffc3678d3f970cdac75.zip |
lib: create primordials in every context
This allows us to use primordials in other per-context scripts.
PR-URL: https://github.com/nodejs/node/pull/27171
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src/api')
-rw-r--r-- | src/api/environment.cc | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/api/environment.cc b/src/api/environment.cc index fb7d7003bb..a87f591e4e 100644 --- a/src/api/environment.cc +++ b/src/api/environment.cc @@ -23,6 +23,7 @@ using v8::Local; using v8::MaybeLocal; using v8::Message; using v8::MicrotasksPolicy; +using v8::Null; using v8::Object; using v8::ObjectTemplate; using v8::Private; @@ -332,24 +333,29 @@ Local<Context> NewContext(Isolate* isolate, // Run per-context JS files. Context::Scope context_scope(context); Local<Object> exports; - if (!GetPerContextExports(context).ToLocal(&exports)) - return Local<Context>(); + Local<String> primordials_string = + FIXED_ONE_BYTE_STRING(isolate, "primordials"); Local<String> global_string = FIXED_ONE_BYTE_STRING(isolate, "global"); Local<String> exports_string = FIXED_ONE_BYTE_STRING(isolate, "exports"); - static const char* context_files[] = { - "internal/per_context/setup", - "internal/per_context/domexception", - nullptr - }; + // Create primordials first and make it available to per-context scripts. + Local<Object> primordials = Object::New(isolate); + if (!primordials->SetPrototype(context, Null(isolate)).FromJust() || + !GetPerContextExports(context).ToLocal(&exports) || + !exports->Set(context, primordials_string, primordials).FromJust()) { + return Local<Context>(); + } + + static const char* context_files[] = {"internal/per_context/primordials", + "internal/per_context/setup", + "internal/per_context/domexception", + nullptr}; for (const char** module = context_files; *module != nullptr; module++) { std::vector<Local<String>> parameters = { - global_string, - exports_string - }; - Local<Value> arguments[] = {context->Global(), exports}; + global_string, exports_string, primordials_string}; + Local<Value> arguments[] = {context->Global(), exports, primordials}; MaybeLocal<Function> maybe_fn = native_module::NativeModuleEnv::LookupAndCompile( context, *module, ¶meters, nullptr); |