diff options
author | Andreu Botella <andreu@andreubotella.com> | 2023-01-16 08:36:42 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-16 22:06:42 +0530 |
commit | f0c79a676cc36a5e8f6f5af86d93186d41974518 (patch) | |
tree | 61831add9e02b32fbc399b613fe11408c4f79d18 /core/bindings.rs | |
parent | 6da958d7ec31f2ffd21bb2beb8cc193a62afc55c (diff) |
refactor(core): Move `pending_promise_rejections` to `ContextState` (#17447)
This is a requirement before supporting modules in realms.
Diffstat (limited to 'core/bindings.rs')
-rw-r--r-- | core/bindings.rs | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/core/bindings.rs b/core/bindings.rs index 96225e4cd..bf0da18e4 100644 --- a/core/bindings.rs +++ b/core/bindings.rs @@ -455,10 +455,12 @@ pub extern "C" fn promise_reject_callback(message: v8::PromiseRejectMessage) { let scope = &mut unsafe { v8::CallbackScope::new(&message) }; let context_state_rc = JsRealm::state_from_scope(scope); + let mut context_state = context_state_rc.borrow_mut(); + + if let Some(js_promise_reject_cb) = context_state.js_promise_reject_cb.clone() + { + drop(context_state); - let promise_reject_cb = - context_state_rc.borrow().js_promise_reject_cb.clone(); - if let Some(js_promise_reject_cb) = promise_reject_cb { let tc_scope = &mut v8::TryCatch::new(scope); let undefined: v8::Local<v8::Value> = v8::undefined(tc_scope).into(); let type_ = v8::Integer::new(tc_scope, message.get_event() as i32); @@ -496,20 +498,20 @@ pub extern "C" fn promise_reject_callback(message: v8::PromiseRejectMessage) { } } } else { - let state_rc = JsRuntime::state(scope); - let mut state = state_rc.borrow_mut(); let promise = message.get_promise(); let promise_global = v8::Global::new(scope, promise); match message.get_event() { PromiseRejectWithNoHandler => { let error = message.get_value().unwrap(); let error_global = v8::Global::new(scope, error); - state + context_state .pending_promise_rejections .insert(promise_global, error_global); } PromiseHandlerAddedAfterReject => { - state.pending_promise_rejections.remove(&promise_global); + context_state + .pending_promise_rejections + .remove(&promise_global); } PromiseRejectAfterResolved => {} PromiseResolveAfterResolved => { |