@@ -36,18 +36,14 @@ Maybe<bool> EmitProcessBeforeExit(Environment* env) {
36
36
if (!env->destroy_async_id_list ()->empty ())
37
37
AsyncWrap::DestroyAsyncIdsCallback (env);
38
38
39
- HandleScope handle_scope (env->isolate ());
39
+ Isolate* isolate = env->isolate ();
40
+ HandleScope handle_scope (isolate);
40
41
Local<Context> context = env->context ();
41
42
Context::Scope context_scope (context);
42
43
43
- Local<Value> exit_code_v;
44
- if (!env->process_object ()->Get (context, env->exit_code_string ())
45
- .ToLocal (&exit_code_v)) return Nothing<bool >();
46
-
47
- Local<Integer> exit_code;
48
- if (!exit_code_v->ToInteger (context).ToLocal (&exit_code)) {
49
- return Nothing<bool >();
50
- }
44
+ Local<Integer> exit_code = v8::Integer::New (
45
+ isolate,
46
+ env->exit_code ().value_or (static_cast <int32_t >(ExitCode::kNoFailure )));
51
47
52
48
return ProcessEmit (env, " beforeExit" , exit_code).IsEmpty () ?
53
49
Nothing<bool >() : Just (true );
@@ -67,27 +63,19 @@ Maybe<ExitCode> EmitProcessExitInternal(Environment* env) {
67
63
HandleScope handle_scope (isolate);
68
64
Local<Context> context = env->context ();
69
65
Context::Scope context_scope (context);
70
- Local<Object> process_object = env->process_object ();
71
66
72
- // TODO(addaleax): It might be nice to share process.exitCode via
73
- // getter/setter pairs that pass data directly to the native side, so that we
74
- // don't manually have to read and write JS properties here. These getters
75
- // could use e.g. a typed array for performance.
76
67
env->set_exiting (true );
77
68
78
- Local<String> exit_code = env->exit_code_string ();
79
- Local<Value> code_v;
80
- int code;
81
- if (!process_object->Get (context, exit_code).ToLocal (&code_v) ||
82
- !code_v->Int32Value (context).To (&code) ||
83
- ProcessEmit (env, " exit" , Integer::New (isolate, code)).IsEmpty () ||
84
- // Reload exit code, it may be changed by `emit('exit')`
85
- !process_object->Get (context, exit_code).ToLocal (&code_v) ||
86
- !code_v->Int32Value (context).To (&code)) {
69
+ const std::optional<int32_t >& exit_code = env->exit_code ();
70
+ const int no_failure = static_cast <int32_t >(ExitCode::kNoFailure );
71
+
72
+ if (ProcessEmit (
73
+ env, " exit" , Integer::New (isolate, exit_code.value_or (no_failure)))
74
+ .IsEmpty ()) {
87
75
return Nothing<ExitCode>();
88
76
}
89
-
90
- return Just (static_cast <ExitCode>(code ));
77
+ // Reload exit code, it may be changed by `emit('exit')`
78
+ return Just (static_cast <ExitCode>(exit_code. value_or (no_failure) ));
91
79
}
92
80
93
81
Maybe<int > EmitProcessExit (Environment* env) {
0 commit comments