Skip to content
Permalink
Browse files

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: #26497
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information...
addaleax authored and targos committed Mar 7, 2019
1 parent f2a07df commit e044563bb0faaf62afaf7b9f358729bc4c70f065
@@ -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
File renamed without changes.
@@ -27,12 +27,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',
@@ -259,25 +259,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>();
}
}
}

0 comments on commit e044563

Please sign in to comment.
You can’t perform that action at this time.