@@ -196,36 +196,56 @@ void SetIsolateCreateParamsForNode(Isolate::CreateParams* params) {
196
196
}
197
197
}
198
198
199
- void SetIsolateUpForNode (v8::Isolate* isolate, IsolateSettingCategories cat) {
200
- switch (cat) {
201
- case IsolateSettingCategories::kErrorHandlers :
202
- isolate->AddMessageListenerWithErrorLevel (
203
- errors::PerIsolateMessageListener,
204
- Isolate::MessageErrorLevel::kMessageError |
205
- Isolate::MessageErrorLevel::kMessageWarning );
206
- isolate->SetAbortOnUncaughtExceptionCallback (
207
- ShouldAbortOnUncaughtException);
208
- isolate->SetFatalErrorHandler (OnFatalError);
209
- isolate->SetPrepareStackTraceCallback (PrepareStackTraceCallback);
210
- break ;
211
- case IsolateSettingCategories::kMisc :
212
- isolate->SetMicrotasksPolicy (MicrotasksPolicy::kExplicit );
213
- isolate->SetAllowWasmCodeGenerationCallback (
214
- AllowWasmCodeGenerationCallback);
215
- isolate->SetPromiseRejectCallback (task_queue::PromiseRejectCallback);
216
- isolate->SetHostCleanupFinalizationGroupCallback (
217
- HostCleanupFinalizationGroupCallback);
218
- v8::CpuProfiler::UseDetailedSourcePositionsForProfiling (isolate);
219
- break ;
220
- default :
221
- UNREACHABLE ();
222
- break ;
223
- }
199
+ void SetIsolateErrorHandlers (v8::Isolate* isolate, const IsolateSettings& s) {
200
+ if (s.flags & MESSAGE_LISTENER_WITH_ERROR_LEVEL)
201
+ isolate->AddMessageListenerWithErrorLevel (
202
+ errors::PerIsolateMessageListener,
203
+ Isolate::MessageErrorLevel::kMessageError |
204
+ Isolate::MessageErrorLevel::kMessageWarning );
205
+
206
+ auto * abort_callback = s.should_abort_on_uncaught_exception_callback ?
207
+ s.should_abort_on_uncaught_exception_callback :
208
+ ShouldAbortOnUncaughtException;
209
+ isolate->SetAbortOnUncaughtExceptionCallback (abort_callback);
210
+
211
+ auto * fatal_error_cb = s.fatal_error_callback ?
212
+ s.fatal_error_callback : OnFatalError;
213
+ isolate->SetFatalErrorHandler (fatal_error_cb);
214
+
215
+ auto * prepare_stack_trace_cb = s.prepare_stack_trace_callback ?
216
+ s.prepare_stack_trace_callback : PrepareStackTraceCallback;
217
+ isolate->SetPrepareStackTraceCallback (prepare_stack_trace_cb);
218
+ }
219
+
220
+ void SetIsolateMiscHandlers (v8::Isolate* isolate, const IsolateSettings& s) {
221
+ isolate->SetMicrotasksPolicy (s.policy );
222
+
223
+ auto * allow_wasm_codegen_cb = s.allow_wasm_code_generation_callback ?
224
+ s.allow_wasm_code_generation_callback : AllowWasmCodeGenerationCallback;
225
+ isolate->SetAllowWasmCodeGenerationCallback (allow_wasm_codegen_cb);
226
+
227
+ auto * promise_reject_cb = s.promise_reject_callback ?
228
+ s.promise_reject_callback : task_queue::PromiseRejectCallback;
229
+ isolate->SetPromiseRejectCallback (promise_reject_cb);
230
+
231
+ auto * host_cleanup_cb = s.host_cleanup_finalization_group_callback ?
232
+ s.host_cleanup_finalization_group_callback :
233
+ HostCleanupFinalizationGroupCallback;
234
+ isolate->SetHostCleanupFinalizationGroupCallback (host_cleanup_cb);
235
+
236
+ if (s.flags & DETAILED_SOURCE_POSITIONS_FOR_PROFILING)
237
+ v8::CpuProfiler::UseDetailedSourcePositionsForProfiling (isolate);
238
+ }
239
+
240
+ void SetIsolateUpForNode (v8::Isolate* isolate,
241
+ const IsolateSettings& settings) {
242
+ SetIsolateErrorHandlers (isolate, settings);
243
+ SetIsolateMiscHandlers (isolate, settings);
224
244
}
225
245
226
246
void SetIsolateUpForNode (v8::Isolate* isolate) {
227
- SetIsolateUpForNode (isolate, IsolateSettingCategories:: kErrorHandlers ) ;
228
- SetIsolateUpForNode (isolate, IsolateSettingCategories:: kMisc );
247
+ IsolateSettings settings ;
248
+ SetIsolateUpForNode (isolate, settings );
229
249
}
230
250
231
251
Isolate* NewIsolate (ArrayBufferAllocator* allocator, uv_loop_t * event_loop) {
0 commit comments