@@ -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) { |
|