aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-03-07 15:12:52 +0100
committerAnna Henningsen <anna@addaleax.net>2019-03-15 16:54:19 +0100
commit7e2088f773d97e00e29cacdc20e1a36b80528be0 (patch)
tree5c99263864c7cf624c4fc3093e0df5429c95fda1
parent0752a18b88452fd0cbf554856dc5305076cb9da5 (diff)
downloadandroid-node-v8-7e2088f773d97e00e29cacdc20e1a36b80528be0.tar.gz
android-node-v8-7e2088f773d97e00e29cacdc20e1a36b80528be0.tar.bz2
android-node-v8-7e2088f773d97e00e29cacdc20e1a36b80528be0.zip
src,lib: allow running multiple per-context files
Create an `lib/internal/per_context/` directory that can host multiple files which we execute for each context. PR-URL: https://github.com/nodejs/node/pull/26497 Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--lib/internal/bootstrap/cache.js5
-rw-r--r--lib/internal/per_context/setup.js (renamed from lib/internal/bootstrap/context.js)0
-rw-r--r--node.gyp2
-rw-r--r--src/api/environment.cc42
4 files changed, 29 insertions, 20 deletions
diff --git a/lib/internal/bootstrap/cache.js b/lib/internal/bootstrap/cache.js
index 3840d7ee25..80073ebe61 100644
--- a/lib/internal/bootstrap/cache.js
+++ b/lib/internal/bootstrap/cache.js
@@ -20,10 +20,11 @@ const cannotBeRequired = [
'internal/test/binding',
- 'internal/bootstrap/context',
'internal/bootstrap/primordials',
'internal/bootstrap/loaders',
- 'internal/bootstrap/node'
+ 'internal/bootstrap/node',
+
+ 'internal/per_context/setup',
];
// Skip modules that cannot be required when they are not
diff --git a/lib/internal/bootstrap/context.js b/lib/internal/per_context/setup.js
index 725ba403df..725ba403df 100644
--- a/lib/internal/bootstrap/context.js
+++ b/lib/internal/per_context/setup.js
diff --git a/node.gyp b/node.gyp
index 1c7484378f..4fbdb58183 100644
--- a/node.gyp
+++ b/node.gyp
@@ -26,12 +26,12 @@
'node_lib_target_name%': 'node_lib',
'node_intermediate_lib_type%': 'static_library',
'library_files': [
- 'lib/internal/bootstrap/context.js',
'lib/internal/bootstrap/primordials.js',
'lib/internal/bootstrap/cache.js',
'lib/internal/bootstrap/loaders.js',
'lib/internal/bootstrap/node.js',
'lib/internal/bootstrap/pre_execution.js',
+ 'lib/internal/per_context/setup.js',
'lib/async_hooks.js',
'lib/assert.js',
'lib/buffer.js',
diff --git a/src/api/environment.cc b/src/api/environment.cc
index 9b8e468685..c4a8120d1c 100644
--- a/src/api/environment.cc
+++ b/src/api/environment.cc
@@ -289,25 +289,33 @@ Local<Context> NewContext(Isolate* isolate,
True(isolate));
{
- // Run lib/internal/bootstrap/context.js
+ // Run per-context JS files.
Context::Scope context_scope(context);
- std::vector<Local<String>> parameters = {
- FIXED_ONE_BYTE_STRING(isolate, "global")};
- Local<Value> arguments[] = {context->Global()};
- MaybeLocal<Function> maybe_fn =
- per_process::native_module_loader.LookupAndCompile(
- context, "internal/bootstrap/context", &parameters, nullptr);
- if (maybe_fn.IsEmpty()) {
- return Local<Context>();
- }
- Local<Function> fn = maybe_fn.ToLocalChecked();
- MaybeLocal<Value> result =
- fn->Call(context, Undefined(isolate), arraysize(arguments), arguments);
- // Execution failed during context creation.
- // TODO(joyeecheung): deprecate this signature and return a MaybeLocal.
- if (result.IsEmpty()) {
- return Local<Context>();
+ static const char* context_files[] = {
+ "internal/per_context/setup",
+ nullptr
+ };
+
+ for (const char** module = context_files; *module != nullptr; module++) {
+ std::vector<Local<String>> parameters = {
+ FIXED_ONE_BYTE_STRING(isolate, "global")};
+ Local<Value> arguments[] = {context->Global()};
+ MaybeLocal<Function> maybe_fn =
+ per_process::native_module_loader.LookupAndCompile(
+ context, *module, &parameters, nullptr);
+ if (maybe_fn.IsEmpty()) {
+ return Local<Context>();
+ }
+ Local<Function> fn = maybe_fn.ToLocalChecked();
+ MaybeLocal<Value> result =
+ fn->Call(context, Undefined(isolate),
+ arraysize(arguments), arguments);
+ // Execution failed during context creation.
+ // TODO(joyeecheung): deprecate this signature and return a MaybeLocal.
+ if (result.IsEmpty()) {
+ return Local<Context>();
+ }
}
}