src: expose MaybeInitializeContext to allow existing contexts
Splits the node.js specific tweak intialization of NewContext into a new helper MaybeInitializeContext so that embedders with existing contexts can still use them in a Node.js Environment now that primordials are initialized and required so early. Update MaybeInitializeContext to return MaybeLocal, PR-URL: https://github.com/nodejs/node/pull/28544 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
d770b8a931
commit
33ae95c58d
@ -353,6 +353,15 @@ Local<Context> NewContext(Isolate* isolate,
|
||||
Local<ObjectTemplate> object_template) {
|
||||
auto context = Context::New(isolate, nullptr, object_template);
|
||||
if (context.IsEmpty()) return context;
|
||||
|
||||
if (!InitializeContext(context)) {
|
||||
return Local<Context>();
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
bool InitializeContext(Local<Context> context) {
|
||||
Isolate* isolate = context->GetIsolate();
|
||||
HandleScope handle_scope(isolate);
|
||||
|
||||
context->SetEmbedderData(ContextEmbedderIndex::kAllowWasmCodeGeneration,
|
||||
@ -373,7 +382,7 @@ Local<Context> NewContext(Isolate* isolate,
|
||||
if (!primordials->SetPrototype(context, Null(isolate)).FromJust() ||
|
||||
!GetPerContextExports(context).ToLocal(&exports) ||
|
||||
!exports->Set(context, primordials_string, primordials).FromJust()) {
|
||||
return Local<Context>();
|
||||
return false;
|
||||
}
|
||||
|
||||
static const char* context_files[] = {"internal/per_context/primordials",
|
||||
@ -389,7 +398,7 @@ Local<Context> NewContext(Isolate* isolate,
|
||||
native_module::NativeModuleEnv::LookupAndCompile(
|
||||
context, *module, ¶meters, nullptr);
|
||||
if (maybe_fn.IsEmpty()) {
|
||||
return Local<Context>();
|
||||
return false;
|
||||
}
|
||||
Local<Function> fn = maybe_fn.ToLocalChecked();
|
||||
MaybeLocal<Value> result =
|
||||
@ -398,12 +407,12 @@ Local<Context> NewContext(Isolate* isolate,
|
||||
// Execution failed during context creation.
|
||||
// TODO(joyeecheung): deprecate this signature and return a MaybeLocal.
|
||||
if (result.IsEmpty()) {
|
||||
return Local<Context>();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return context;
|
||||
return true;
|
||||
}
|
||||
|
||||
uv_loop_t* GetCurrentEventLoop(Isolate* isolate) {
|
||||
|
@ -305,6 +305,10 @@ NODE_EXTERN v8::Local<v8::Context> NewContext(
|
||||
v8::Local<v8::ObjectTemplate> object_template =
|
||||
v8::Local<v8::ObjectTemplate>());
|
||||
|
||||
// Runs Node.js-specific tweaks on an already constructed context
|
||||
// Return value indicates success of operation
|
||||
NODE_EXTERN bool InitializeContext(v8::Local<v8::Context> context);
|
||||
|
||||
// If `platform` is passed, it will be used to register new Worker instances.
|
||||
// It can be `nullptr`, in which case creating new Workers inside of
|
||||
// Environments that use this `IsolateData` will not work.
|
||||
|
Loading…
x
Reference in New Issue
Block a user