@@ -130,7 +130,6 @@ using options_parser::kAllowedInEnvironment;
130
130
using options_parser::kDisallowedInEnvironment ;
131
131
132
132
using v8::Boolean;
133
- using v8::Context;
134
133
using v8::EscapableHandleScope;
135
134
using v8::Exception;
136
135
using v8::Function;
@@ -277,99 +276,111 @@ void Environment::InitializeDiagnostics() {
277
276
#endif
278
277
}
279
278
280
- MaybeLocal<Value> RunBootstrapping (Environment* env) {
281
- CHECK (!env->has_run_bootstrapping_code ());
282
-
283
- EscapableHandleScope scope (env->isolate ());
284
- Isolate* isolate = env->isolate ();
285
- Local<Context> context = env->context ();
286
-
287
-
288
- // Add a reference to the global object
289
- Local<Object> global = context->Global ();
290
- Local<Object> process = env->process_object ();
291
-
292
- // Setting global properties for the bootstrappers to use:
293
- // - global
294
- // Expose the global object as a property on itself
295
- // (Allows you to set stuff on `global` from anywhere in JavaScript.)
296
- global->Set (context, FIXED_ONE_BYTE_STRING (env->isolate (), " global" ), global)
297
- .Check ();
298
-
279
+ MaybeLocal<Value> Environment::BootstrapInternalLoaders () {
280
+ EscapableHandleScope scope (isolate_);
299
281
300
282
// Create binding loaders
301
283
std::vector<Local<String>> loaders_params = {
302
- env-> process_string (),
303
- FIXED_ONE_BYTE_STRING (isolate , " getLinkedBinding" ),
304
- FIXED_ONE_BYTE_STRING (isolate , " getInternalBinding" ),
305
- env-> primordials_string ()};
284
+ process_string (),
285
+ FIXED_ONE_BYTE_STRING (isolate_ , " getLinkedBinding" ),
286
+ FIXED_ONE_BYTE_STRING (isolate_ , " getInternalBinding" ),
287
+ primordials_string ()};
306
288
std::vector<Local<Value>> loaders_args = {
307
- process ,
308
- env-> NewFunctionTemplate (binding::GetLinkedBinding)
309
- ->GetFunction (context)
289
+ process_object () ,
290
+ NewFunctionTemplate (binding::GetLinkedBinding)
291
+ ->GetFunction (context () )
310
292
.ToLocalChecked (),
311
- env-> NewFunctionTemplate (binding::GetInternalBinding)
312
- ->GetFunction (context)
293
+ NewFunctionTemplate (binding::GetInternalBinding)
294
+ ->GetFunction (context () )
313
295
.ToLocalChecked (),
314
- env-> primordials ()};
296
+ primordials ()};
315
297
316
298
// Bootstrap internal loaders
317
- MaybeLocal<Value> loader_exports = ExecuteBootstrapper (
318
- env, " internal/bootstrap/loaders" , &loaders_params, &loaders_args);
319
- if (loader_exports.IsEmpty ()) {
299
+ Local<Value> loader_exports;
300
+ if (!ExecuteBootstrapper (
301
+ this , " internal/bootstrap/loaders" , &loaders_params, &loaders_args)
302
+ .ToLocal (&loader_exports)) {
320
303
return MaybeLocal<Value>();
321
304
}
322
-
323
- Local<Object> loader_exports_obj =
324
- loader_exports.ToLocalChecked ().As <Object>();
305
+ CHECK (loader_exports->IsObject ());
306
+ Local<Object> loader_exports_obj = loader_exports.As <Object>();
325
307
Local<Value> internal_binding_loader =
326
- loader_exports_obj->Get (context, env-> internal_binding_string ())
308
+ loader_exports_obj->Get (context (), internal_binding_string ())
327
309
.ToLocalChecked ();
328
- env-> set_internal_binding_loader (internal_binding_loader. As <Function> ());
329
-
310
+ CHECK (internal_binding_loader-> IsFunction ());
311
+ set_internal_binding_loader (internal_binding_loader. As <Function>());
330
312
Local<Value> require =
331
- loader_exports_obj->Get (context, env->require_string ()).ToLocalChecked ();
332
- env->set_native_module_require (require.As <Function>());
313
+ loader_exports_obj->Get (context (), require_string ()).ToLocalChecked ();
314
+ CHECK (require->IsFunction ());
315
+ set_native_module_require (require.As <Function>());
316
+
317
+ return scope.Escape (loader_exports);
318
+ }
319
+
320
+ MaybeLocal<Value> Environment::BootstrapNode () {
321
+ EscapableHandleScope scope (isolate_);
322
+
323
+ Local<Object> global = context ()->Global ();
324
+ // TODO(joyeecheung): this can be done in JS land now.
325
+ global->Set (context (), FIXED_ONE_BYTE_STRING (isolate_, " global" ), global)
326
+ .Check ();
333
327
334
328
// process, require, internalBinding, isMainThread,
335
329
// ownsProcessState, primordials
336
330
std::vector<Local<String>> node_params = {
337
- env-> process_string (),
338
- env-> require_string (),
339
- env-> internal_binding_string (),
340
- FIXED_ONE_BYTE_STRING (isolate , " isMainThread" ),
341
- FIXED_ONE_BYTE_STRING (isolate , " ownsProcessState" ),
342
- env-> primordials_string ()};
331
+ process_string (),
332
+ require_string (),
333
+ internal_binding_string (),
334
+ FIXED_ONE_BYTE_STRING (isolate_ , " isMainThread" ),
335
+ FIXED_ONE_BYTE_STRING (isolate_ , " ownsProcessState" ),
336
+ primordials_string ()};
343
337
std::vector<Local<Value>> node_args = {
344
- process ,
345
- require ,
346
- internal_binding_loader,
347
- Boolean::New (isolate, env-> is_main_thread ()),
348
- Boolean::New (isolate, env-> owns_process_state ()),
349
- env-> primordials ()};
338
+ process_object () ,
339
+ native_module_require () ,
340
+ internal_binding_loader () ,
341
+ Boolean::New (isolate_, is_main_thread ()),
342
+ Boolean::New (isolate_, owns_process_state ()),
343
+ primordials ()};
350
344
351
345
MaybeLocal<Value> result = ExecuteBootstrapper (
352
- env , " internal/bootstrap/node" , &node_params, &node_args);
346
+ this , " internal/bootstrap/node" , &node_params, &node_args);
353
347
354
348
Local<Object> env_var_proxy;
355
- if (!CreateEnvVarProxy (context, isolate, env-> as_callback_data ())
349
+ if (!CreateEnvVarProxy (context (), isolate_, as_callback_data ())
356
350
.ToLocal (&env_var_proxy) ||
357
- process
358
- ->Set (env->context (),
359
- FIXED_ONE_BYTE_STRING (env->isolate (), " env" ),
360
- env_var_proxy)
361
- .IsNothing ())
351
+ process_object ()
352
+ ->Set (
353
+ context (), FIXED_ONE_BYTE_STRING (isolate_, " env" ), env_var_proxy)
354
+ .IsNothing ()) {
355
+ return MaybeLocal<Value>();
356
+ }
357
+
358
+ return scope.EscapeMaybe (result);
359
+ }
360
+
361
+ MaybeLocal<Value> Environment::RunBootstrapping () {
362
+ EscapableHandleScope scope (isolate_);
363
+
364
+ CHECK (!has_run_bootstrapping_code ());
365
+
366
+ if (BootstrapInternalLoaders ().IsEmpty ()) {
367
+ return MaybeLocal<Value>();
368
+ }
369
+
370
+ Local<Value> result;
371
+ if (!BootstrapNode ().ToLocal (&result)) {
362
372
return MaybeLocal<Value>();
373
+ }
363
374
364
375
// Make sure that no request or handle is created during bootstrap -
365
376
// if necessary those should be done in pre-execution.
366
377
// TODO(joyeecheung): print handles/requests before aborting
367
- CHECK (env-> req_wrap_queue ()->IsEmpty ());
368
- CHECK (env-> handle_wrap_queue ()->IsEmpty ());
378
+ CHECK (req_wrap_queue ()->IsEmpty ());
379
+ CHECK (handle_wrap_queue ()->IsEmpty ());
369
380
370
- env-> set_has_run_bootstrapping_code (true );
381
+ set_has_run_bootstrapping_code (true );
371
382
372
- return scope.EscapeMaybe (result);
383
+ return scope.Escape (result);
373
384
}
374
385
375
386
void MarkBootstrapComplete (const FunctionCallbackInfo<Value>& args) {
0 commit comments