Skip to content

Commit 7a447bc

Browse files
committedJul 18, 2020
src: snapshot node
This runs `lib/internal/bootstrap/node.js` before creating the builtin snapshot and deserialize the loaders from the snapshot in deserialization mode. PR-URL: nodejs#32984 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Daniel Bevenius <[email protected]>
1 parent b1c3909 commit 7a447bc

23 files changed

+326
-15
lines changed
 

‎src/async_wrap.cc

+22
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "async_wrap-inl.h"
2424
#include "env-inl.h"
2525
#include "node_errors.h"
26+
#include "node_external_reference.h"
2627
#include "tracing/traced_value.h"
2728
#include "util-inl.h"
2829

@@ -695,6 +696,25 @@ void AsyncWrap::Initialize(Local<Object> target,
695696
PromiseWrap::Initialize(env);
696697
}
697698

699+
void AsyncWrap::RegisterExternalReferences(
700+
ExternalReferenceRegistry* registry) {
701+
registry->Register(SetupHooks);
702+
registry->Register(SetCallbackTrampoline);
703+
registry->Register(PushAsyncContext);
704+
registry->Register(PopAsyncContext);
705+
registry->Register(ExecutionAsyncResource);
706+
registry->Register(ClearAsyncIdStack);
707+
registry->Register(QueueDestroyAsyncId);
708+
registry->Register(EnablePromiseHook);
709+
registry->Register(DisablePromiseHook);
710+
registry->Register(RegisterDestroyHook);
711+
registry->Register(AsyncWrapObject::New);
712+
registry->Register(AsyncWrap::GetAsyncId);
713+
registry->Register(AsyncWrap::AsyncReset);
714+
registry->Register(AsyncWrap::GetProviderType);
715+
registry->Register(PromiseWrap::GetAsyncId);
716+
registry->Register(PromiseWrap::GetTriggerAsyncId);
717+
}
698718

699719
AsyncWrap::AsyncWrap(Environment* env,
700720
Local<Object> object,
@@ -924,3 +944,5 @@ Local<Object> AsyncWrap::GetOwner(Environment* env, Local<Object> obj) {
924944
} // namespace node
925945

926946
NODE_MODULE_CONTEXT_AWARE_INTERNAL(async_wrap, node::AsyncWrap::Initialize)
947+
NODE_MODULE_EXTERNAL_REFERENCE(async_wrap,
948+
node::AsyncWrap::RegisterExternalReferences)

‎src/async_wrap.h

+2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ namespace node {
106106

107107
class Environment;
108108
class DestroyParam;
109+
class ExternalReferenceRegistry;
109110

110111
class AsyncWrap : public BaseObject {
111112
public:
@@ -135,6 +136,7 @@ class AsyncWrap : public BaseObject {
135136
static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
136137
Environment* env);
137138

139+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
138140
static void Initialize(v8::Local<v8::Object> target,
139141
v8::Local<v8::Value> unused,
140142
v8::Local<v8::Context> context,

‎src/handle_wrap.cc

+11
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "handle_wrap.h"
2323
#include "async_wrap-inl.h"
2424
#include "env-inl.h"
25+
#include "node_external_reference.h"
2526
#include "util-inl.h"
2627

2728
namespace node {
@@ -152,5 +153,15 @@ Local<FunctionTemplate> HandleWrap::GetConstructorTemplate(Environment* env) {
152153
return tmpl;
153154
}
154155

156+
void HandleWrap::RegisterExternalReferences(
157+
ExternalReferenceRegistry* registry) {
158+
registry->Register(HandleWrap::Close);
159+
registry->Register(HandleWrap::HasRef);
160+
registry->Register(HandleWrap::Ref);
161+
registry->Register(HandleWrap::Unref);
162+
}
155163

156164
} // namespace node
165+
166+
NODE_MODULE_EXTERNAL_REFERENCE(handle_wrap,
167+
node::HandleWrap::RegisterExternalReferences)

‎src/handle_wrap.h

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
namespace node {
3333

3434
class Environment;
35+
class ExternalReferenceRegistry;
3536

3637
// Rules:
3738
//
@@ -77,6 +78,7 @@ class HandleWrap : public AsyncWrap {
7778

7879
static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
7980
Environment* env);
81+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
8082

8183
protected:
8284
HandleWrap(Environment* env,

‎src/inspector_js_api.cc

+29-1
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
#include "inspector_agent.h"
33
#include "inspector_io.h"
44
#include "memory_tracker-inl.h"
5+
#include "node_external_reference.h"
56
#include "util-inl.h"
6-
#include "v8.h"
77
#include "v8-inspector.h"
8+
#include "v8.h"
89

910
#include <memory>
1011

@@ -345,8 +346,35 @@ void Initialize(Local<Object> target, Local<Value> unused,
345346
}
346347

347348
} // namespace
349+
350+
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
351+
registry->Register(InspectorConsoleCall);
352+
registry->Register(SetConsoleExtensionInstaller);
353+
registry->Register(CallAndPauseOnStart);
354+
registry->Register(Open);
355+
registry->Register(Url);
356+
registry->Register(WaitForDebugger);
357+
358+
registry->Register(AsyncTaskScheduledWrapper);
359+
registry->Register(InvokeAsyncTaskFnWithId<&Agent::AsyncTaskCanceled>);
360+
registry->Register(InvokeAsyncTaskFnWithId<&Agent::AsyncTaskStarted>);
361+
registry->Register(InvokeAsyncTaskFnWithId<&Agent::AsyncTaskFinished>);
362+
363+
registry->Register(RegisterAsyncHookWrapper);
364+
registry->Register(IsEnabled);
365+
366+
registry->Register(JSBindingsConnection<LocalConnection>::New);
367+
registry->Register(JSBindingsConnection<LocalConnection>::Dispatch);
368+
registry->Register(JSBindingsConnection<LocalConnection>::Disconnect);
369+
registry->Register(JSBindingsConnection<MainThreadConnection>::New);
370+
registry->Register(JSBindingsConnection<MainThreadConnection>::Dispatch);
371+
registry->Register(JSBindingsConnection<MainThreadConnection>::Disconnect);
372+
}
373+
348374
} // namespace inspector
349375
} // namespace node
350376

351377
NODE_MODULE_CONTEXT_AWARE_INTERNAL(inspector,
352378
node::inspector::Initialize)
379+
NODE_MODULE_EXTERNAL_REFERENCE(inspector,
380+
node::inspector::RegisterExternalReferences)

‎src/node_buffer.cc

+39
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "allocated_buffer-inl.h"
2424
#include "node.h"
2525
#include "node_errors.h"
26+
#include "node_external_reference.h"
2627
#include "node_internals.h"
2728

2829
#include "env-inl.h"
@@ -1197,7 +1198,45 @@ void Initialize(Local<Object> target,
11971198
}
11981199

11991200
} // anonymous namespace
1201+
1202+
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
1203+
registry->Register(SetBufferPrototype);
1204+
registry->Register(CreateFromString);
1205+
1206+
registry->Register(ByteLengthUtf8);
1207+
registry->Register(Copy);
1208+
registry->Register(Compare);
1209+
registry->Register(CompareOffset);
1210+
registry->Register(Fill);
1211+
registry->Register(IndexOfBuffer);
1212+
registry->Register(IndexOfNumber);
1213+
registry->Register(IndexOfString);
1214+
1215+
registry->Register(Swap16);
1216+
registry->Register(Swap32);
1217+
registry->Register(Swap64);
1218+
1219+
registry->Register(EncodeInto);
1220+
registry->Register(EncodeUtf8String);
1221+
1222+
registry->Register(StringSlice<ASCII>);
1223+
registry->Register(StringSlice<BASE64>);
1224+
registry->Register(StringSlice<LATIN1>);
1225+
registry->Register(StringSlice<HEX>);
1226+
registry->Register(StringSlice<UCS2>);
1227+
registry->Register(StringSlice<UTF8>);
1228+
1229+
registry->Register(StringWrite<ASCII>);
1230+
registry->Register(StringWrite<BASE64>);
1231+
registry->Register(StringWrite<LATIN1>);
1232+
registry->Register(StringWrite<HEX>);
1233+
registry->Register(StringWrite<UCS2>);
1234+
registry->Register(StringWrite<UTF8>);
1235+
registry->Register(GetZeroFillToggle);
1236+
}
1237+
12001238
} // namespace Buffer
12011239
} // namespace node
12021240

12031241
NODE_MODULE_CONTEXT_AWARE_INTERNAL(buffer, node::Buffer::Initialize)
1242+
NODE_MODULE_EXTERNAL_REFERENCE(buffer, node::Buffer::RegisterExternalReferences)

‎src/node_credentials.cc

+22
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "env-inl.h"
2+
#include "node_external_reference.h"
23
#include "node_internals.h"
34
#include "util-inl.h"
45

@@ -371,6 +372,25 @@ static void InitGroups(const FunctionCallbackInfo<Value>& args) {
371372

372373
#endif // NODE_IMPLEMENTS_POSIX_CREDENTIALS
373374

375+
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
376+
registry->Register(SafeGetenv);
377+
378+
#ifdef NODE_IMPLEMENTS_POSIX_CREDENTIALS
379+
registry->Register(GetUid);
380+
registry->Register(GetEUid);
381+
registry->Register(GetGid);
382+
registry->Register(GetEGid);
383+
registry->Register(GetGroups);
384+
385+
registry->Register(InitGroups);
386+
registry->Register(SetEGid);
387+
registry->Register(SetEUid);
388+
registry->Register(SetGid);
389+
registry->Register(SetUid);
390+
registry->Register(SetGroups);
391+
#endif // NODE_IMPLEMENTS_POSIX_CREDENTIALS
392+
}
393+
374394
static void Initialize(Local<Object> target,
375395
Local<Value> unused,
376396
Local<Context> context,
@@ -403,3 +423,5 @@ static void Initialize(Local<Object> target,
403423
} // namespace node
404424

405425
NODE_MODULE_CONTEXT_AWARE_INTERNAL(credentials, node::credentials::Initialize)
426+
NODE_MODULE_EXTERNAL_REFERENCE(credentials,
427+
node::credentials::RegisterExternalReferences)

‎src/node_env_var.cc

+11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "debug_utils-inl.h"
22
#include "env-inl.h"
33
#include "node_errors.h"
4+
#include "node_external_reference.h"
45
#include "node_process.h"
56

67
#include <time.h> // tzset(), _tzset()
@@ -384,4 +385,14 @@ MaybeLocal<Object> CreateEnvVarProxy(Local<Context> context, Isolate* isolate) {
384385
PropertyHandlerFlags::kHasNoSideEffect));
385386
return scope.EscapeMaybe(env_proxy_template->NewInstance(context));
386387
}
388+
389+
void RegisterEnvVarExternalReferences(ExternalReferenceRegistry* registry) {
390+
registry->Register(EnvGetter);
391+
registry->Register(EnvSetter);
392+
registry->Register(EnvQuery);
393+
registry->Register(EnvDeleter);
394+
registry->Register(EnvEnumerator);
395+
}
387396
} // namespace node
397+
398+
NODE_MODULE_EXTERNAL_REFERENCE(env_var, node::RegisterEnvVarExternalReferences)

‎src/node_errors.cc

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33

44
#include "debug_utils-inl.h"
55
#include "node_errors.h"
6+
#include "node_external_reference.h"
67
#include "node_internals.h"
7-
#include "node_report.h"
88
#include "node_process.h"
9+
#include "node_report.h"
910
#include "node_v8_platform-inl.h"
1011
#include "util-inl.h"
1112

@@ -852,6 +853,14 @@ static void TriggerUncaughtException(const FunctionCallbackInfo<Value>& args) {
852853
errors::TriggerUncaughtException(isolate, exception, message, from_promise);
853854
}
854855

856+
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
857+
registry->Register(SetPrepareStackTraceCallback);
858+
registry->Register(EnableSourceMaps);
859+
registry->Register(SetEnhanceStackForFatalException);
860+
registry->Register(NoSideEffectsToString);
861+
registry->Register(TriggerUncaughtException);
862+
}
863+
855864
void Initialize(Local<Object> target,
856865
Local<Value> unused,
857866
Local<Context> context,
@@ -1023,3 +1032,4 @@ void TriggerUncaughtException(Isolate* isolate, const v8::TryCatch& try_catch) {
10231032
} // namespace node
10241033

10251034
NODE_MODULE_CONTEXT_AWARE_INTERNAL(errors, node::errors::Initialize)
1035+
NODE_MODULE_EXTERNAL_REFERENCE(errors, node::errors::RegisterExternalReferences)

‎src/node_external_reference.h

+31-2
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,41 @@ class ExternalReferenceRegistry {
4747
};
4848

4949
#define EXTERNAL_REFERENCE_BINDING_LIST_BASE(V) \
50+
V(async_wrap) \
5051
V(binding) \
52+
V(buffer) \
53+
V(credentials) \
54+
V(env_var) \
55+
V(errors) \
56+
V(handle_wrap) \
57+
V(messaging) \
5158
V(native_module) \
52-
V(process_object)
59+
V(process_methods) \
60+
V(process_object) \
61+
V(task_queue) \
62+
V(url) \
63+
V(util) \
64+
V(string_decoder) \
65+
V(trace_events) \
66+
V(timers) \
67+
V(types)
68+
69+
#if NODE_HAVE_I18N_SUPPORT
70+
#define EXTERNAL_REFERENCE_BINDING_LIST_I18N(V) V(icu)
71+
#else
72+
#define EXTERNAL_REFERENCE_BINDING_LIST_I18N(V)
73+
#endif // NODE_HAVE_I18N_SUPPORT
74+
75+
#if HAVE_INSPECTOR
76+
#define EXTERNAL_REFERENCE_BINDING_LIST_INSPECTOR(V) V(inspector)
77+
#else
78+
#define EXTERNAL_REFERENCE_BINDING_LIST_INSPECTOR(V)
79+
#endif // HAVE_INSPECTOR
5380

5481
#define EXTERNAL_REFERENCE_BINDING_LIST(V) \
55-
EXTERNAL_REFERENCE_BINDING_LIST_BASE(V)
82+
EXTERNAL_REFERENCE_BINDING_LIST_BASE(V) \
83+
EXTERNAL_REFERENCE_BINDING_LIST_INSPECTOR(V) \
84+
EXTERNAL_REFERENCE_BINDING_LIST_I18N(V)
5685

5786
} // namespace node
5887

‎src/node_i18n.cc

+13
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141

4242

4343
#include "node_i18n.h"
44+
#include "node_external_reference.h"
4445

4546
#if defined(NODE_HAVE_I18N_SUPPORT)
4647

@@ -824,9 +825,21 @@ void Initialize(Local<Object> target,
824825
env->SetMethod(target, "hasConverter", ConverterObject::Has);
825826
}
826827

828+
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
829+
registry->Register(ToUnicode);
830+
registry->Register(ToASCII);
831+
registry->Register(GetStringWidth);
832+
registry->Register(ICUErrorName);
833+
registry->Register(Transcode);
834+
registry->Register(ConverterObject::Create);
835+
registry->Register(ConverterObject::Decode);
836+
registry->Register(ConverterObject::Has);
837+
}
838+
827839
} // namespace i18n
828840
} // namespace node
829841

830842
NODE_MODULE_CONTEXT_AWARE_INTERNAL(icu, node::i18n::Initialize)
843+
NODE_MODULE_EXTERNAL_REFERENCE(icu, node::i18n::RegisterExternalReferences)
831844

832845
#endif // NODE_HAVE_I18N_SUPPORT

‎src/node_i18n.h

-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
#include <string>
3737

3838
namespace node {
39-
4039
namespace i18n {
4140

4241
bool InitializeICUDirectory(const std::string& path);

‎src/node_main_instance.cc

-4
Original file line numberDiff line numberDiff line change
@@ -263,10 +263,6 @@ NodeMainInstance::CreateMainEnvironment(int* exit_code,
263263
return nullptr;
264264
}
265265

266-
if (deserialize_mode_ && env->BootstrapNode().IsEmpty()) {
267-
return nullptr;
268-
}
269-
270266
CHECK(env->req_wrap_queue()->IsEmpty());
271267
CHECK(env->handle_wrap_queue()->IsEmpty());
272268
env->set_has_run_bootstrapping_code(true);

0 commit comments

Comments
 (0)
Please sign in to comment.