Skip to content

Commit cbeeeba

Browse files
committed
src: return MaybeLocal from a couple of functions
Functions affected: * InitializeContext() * InitializeContextForSnapshot() * InitializePrimordials() Signed-off-by: Darshan Sen <[email protected]>
1 parent 8be3b91 commit cbeeeba

File tree

3 files changed

+25
-17
lines changed

3 files changed

+25
-17
lines changed

src/api/environment.cc

+19-14
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ MaybeLocal<Object> GetPerContextExports(Local<Context> context) {
501501

502502
Local<Object> exports = Object::New(isolate);
503503
if (context->Global()->SetPrivate(context, key, exports).IsNothing() ||
504-
!InitializePrimordials(context))
504+
InitializePrimordials(context).IsEmpty())
505505
return MaybeLocal<Object>();
506506
return handle_scope.Escape(exports);
507507
}
@@ -514,7 +514,7 @@ Local<Context> NewContext(Isolate* isolate,
514514
auto context = Context::New(isolate, nullptr, object_template);
515515
if (context.IsEmpty()) return context;
516516

517-
if (!InitializeContext(context)) {
517+
if (InitializeContext(context).IsEmpty()) {
518518
return Local<Context>();
519519
}
520520

@@ -581,16 +581,21 @@ void InitializeContextRuntime(Local<Context> context) {
581581
}
582582
}
583583

584-
bool InitializeContextForSnapshot(Local<Context> context) {
584+
MaybeLocal<Context> InitializeContextForSnapshot(Local<Context> context) {
585585
Isolate* isolate = context->GetIsolate();
586586
HandleScope handle_scope(isolate);
587587

588588
context->SetEmbedderData(ContextEmbedderIndex::kAllowWasmCodeGeneration,
589589
True(isolate));
590-
return InitializePrimordials(context);
590+
591+
if (InitializePrimordials(context).IsEmpty()) {
592+
return MaybeLocal<Context>();
593+
}
594+
595+
return context;
591596
}
592597

593-
bool InitializePrimordials(Local<Context> context) {
598+
MaybeLocal<Object> InitializePrimordials(Local<Context> context) {
594599
// Run per-context JS files.
595600
Isolate* isolate = context->GetIsolate();
596601
Context::Scope context_scope(context);
@@ -606,7 +611,7 @@ bool InitializePrimordials(Local<Context> context) {
606611
if (!primordials->SetPrototype(context, Null(isolate)).FromJust() ||
607612
!GetPerContextExports(context).ToLocal(&exports) ||
608613
!exports->Set(context, primordials_string, primordials).FromJust()) {
609-
return false;
614+
return MaybeLocal<Object>();
610615
}
611616

612617
static const char* context_files[] = {"internal/per_context/primordials",
@@ -623,27 +628,27 @@ bool InitializePrimordials(Local<Context> context) {
623628
context, *module, &parameters, nullptr);
624629
Local<Function> fn;
625630
if (!maybe_fn.ToLocal(&fn)) {
626-
return false;
631+
return MaybeLocal<Object>();
627632
}
628633
MaybeLocal<Value> result =
629634
fn->Call(context, Undefined(isolate), arraysize(arguments), arguments);
630635
// Execution failed during context creation.
631-
// TODO(joyeecheung): deprecate this signature and return a MaybeLocal.
632636
if (result.IsEmpty()) {
633-
return false;
637+
return MaybeLocal<Object>();
634638
}
635639
}
636640

637-
return true;
641+
return primordials;
638642
}
639643

640-
bool InitializeContext(Local<Context> context) {
641-
if (!InitializeContextForSnapshot(context)) {
642-
return false;
644+
MaybeLocal<Context> InitializeContext(Local<Context> context) {
645+
if (InitializeContextForSnapshot(context).IsEmpty()) {
646+
return MaybeLocal<Context>();
643647
}
644648

645649
InitializeContextRuntime(context);
646-
return true;
650+
651+
return context;
647652
}
648653

649654
uv_loop_t* GetCurrentEventLoop(Isolate* isolate) {

src/node.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,8 @@ NODE_EXTERN v8::Local<v8::Context> NewContext(
367367

368368
// Runs Node.js-specific tweaks on an already constructed context
369369
// Return value indicates success of operation
370-
NODE_EXTERN bool InitializeContext(v8::Local<v8::Context> context);
370+
NODE_EXTERN v8::MaybeLocal<v8::Context> InitializeContext(
371+
v8::Local<v8::Context> context);
371372

372373
// If `platform` is passed, it will be used to register new Worker instances.
373374
// It can be `nullptr`, in which case creating new Workers inside of

src/node_internals.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,10 @@ void SignalExit(int signal, siginfo_t* info, void* ucontext);
9292
std::string GetProcessTitle(const char* default_title);
9393
std::string GetHumanReadableProcessName();
9494

95-
void InitializeContextRuntime(v8::Local<v8::Context>);
96-
bool InitializePrimordials(v8::Local<v8::Context> context);
95+
// TODO(RaisinTen): return a MaybeLocal.
96+
void InitializeContextRuntime(v8::Local<v8::Context> context);
97+
v8::MaybeLocal<v8::Object> InitializePrimordials(
98+
v8::Local<v8::Context> context);
9799

98100
class NodeArrayBufferAllocator : public ArrayBufferAllocator {
99101
public:

0 commit comments

Comments
 (0)