@@ -99,17 +99,30 @@ TNode<Object> AsyncBuiltinsAssembler::AwaitOld(
99
99
100
100
TVARIABLE (HeapObject, var_throwaway, UndefinedConstant ());
101
101
102
+ RunContextPromiseHookInit (context, promise, outer_promise);
103
+
102
104
// Deal with PromiseHooks and debug support in the runtime. This
103
105
// also allocates the throwaway promise, which is only needed in
104
106
// case of PromiseHooks or debugging.
105
- Label if_debugging (this , Label::kDeferred ), do_resolve_promise (this );
107
+ Label if_debugging (this , Label::kDeferred ),
108
+ if_promise_hook (this , Label::kDeferred ),
109
+ not_debugging (this ),
110
+ do_resolve_promise (this );
106
111
Branch (IsPromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate (),
107
- &if_debugging, &do_resolve_promise );
112
+ &if_debugging, ¬_debugging );
108
113
BIND (&if_debugging);
109
114
var_throwaway =
110
115
CAST (CallRuntime (Runtime::kAwaitPromisesInitOld , context, value, promise,
111
116
outer_promise, on_reject, is_predicted_as_caught));
112
117
Goto (&do_resolve_promise);
118
+ BIND (¬_debugging);
119
+
120
+ const TNode<Object> promise_hook_obj = LoadContextElement (
121
+ native_context, Context::PROMISE_HOOK_INIT_FUNCTION_INDEX);
122
+ Branch (IsUndefined (promise_hook_obj), &do_resolve_promise, &if_promise_hook);
123
+ BIND (&if_promise_hook);
124
+ var_throwaway = NewJSPromise (context, promise);
125
+ Goto (&do_resolve_promise);
113
126
BIND (&do_resolve_promise);
114
127
115
128
// Perform ! Call(promiseCapability.[[Resolve]], undefined, « promise »).
@@ -173,14 +186,26 @@ TNode<Object> AsyncBuiltinsAssembler::AwaitOptimized(
173
186
// Deal with PromiseHooks and debug support in the runtime. This
174
187
// also allocates the throwaway promise, which is only needed in
175
188
// case of PromiseHooks or debugging.
176
- Label if_debugging (this , Label::kDeferred ), do_perform_promise_then (this );
189
+ Label if_debugging (this , Label::kDeferred ),
190
+ if_promise_hook (this , Label::kDeferred ),
191
+ not_debugging (this ),
192
+ do_perform_promise_then (this );
177
193
Branch (IsPromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate (),
178
- &if_debugging, &do_perform_promise_then );
194
+ &if_debugging, ¬_debugging );
179
195
BIND (&if_debugging);
180
196
var_throwaway =
181
197
CAST (CallRuntime (Runtime::kAwaitPromisesInit , context, promise, promise,
182
198
outer_promise, on_reject, is_predicted_as_caught));
183
199
Goto (&do_perform_promise_then);
200
+ BIND (¬_debugging);
201
+
202
+ const TNode<Object> promise_hook_obj = LoadContextElement (
203
+ native_context, Context::PROMISE_HOOK_INIT_FUNCTION_INDEX);
204
+ Branch (IsUndefined (promise_hook_obj), &do_perform_promise_then,
205
+ &if_promise_hook);
206
+ BIND (&if_promise_hook);
207
+ var_throwaway = NewJSPromise (context, promise);
208
+ Goto (&do_perform_promise_then);
184
209
BIND (&do_perform_promise_then);
185
210
186
211
return CallBuiltin (Builtins::kPerformPromiseThen , native_context, promise,
0 commit comments