Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(413)

Unified Diff: src/builtins/builtins-promise.cc

Issue 2575313002: [promisehook] Implement PromiseHook (Closed)
Patch Set: rebase + add comments Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/builtins/builtins.h ('k') | src/code-stub-assembler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/builtins/builtins-promise.cc
diff --git a/src/builtins/builtins-promise.cc b/src/builtins/builtins-promise.cc
index a7e78a6ca46322376c85a17a575c68dda3e39e4b..9b1211bf205e994e203f3d36a36d86791fd6ff6b 100644
--- a/src/builtins/builtins-promise.cc
+++ b/src/builtins/builtins-promise.cc
@@ -371,6 +371,12 @@ void PromiseBuiltinsAssembler::InternalResolvePromise(Node* context,
Label do_enqueue(this), fulfill(this), if_cycle(this, Label::kDeferred),
if_rejectpromise(this, Label::kDeferred);
+ Label cycle_check(this);
+ GotoUnless(IsPromiseHookEnabled(), &cycle_check);
+ CallRuntime(Runtime::kPromiseHookResolve, context, promise);
+ Goto(&cycle_check);
+
+ Bind(&cycle_check);
// 6. If SameValue(resolution, promise) is true, then
GotoIf(SameValue(promise, result, context), &if_cycle);
@@ -591,6 +597,9 @@ TF_BUILTIN(PromiseConstructor, PromiseBuiltinsAssembler) {
{
Node* const instance = AllocateJSPromise(context);
var_result.Bind(instance);
+ GotoUnless(IsPromiseHookEnabled(), &init);
+ CallRuntime(Runtime::kPromiseHookInit, context, instance,
+ UndefinedConstant());
Goto(&init);
}
@@ -671,9 +680,17 @@ TF_BUILTIN(PromiseConstructor, PromiseBuiltinsAssembler) {
}
TF_BUILTIN(PromiseInternalConstructor, PromiseBuiltinsAssembler) {
- Node* const context = Parameter(3);
+ Node* const parent = Parameter(1);
+ Node* const context = Parameter(4);
Node* const instance = AllocateJSPromise(context);
PromiseInit(instance);
+
+ Label out(this);
+ GotoUnless(IsPromiseHookEnabled(), &out);
+ CallRuntime(Runtime::kPromiseHookInit, context, instance, parent);
+ Goto(&out);
+ Bind(&out);
+
Return(instance);
}
@@ -684,6 +701,13 @@ TF_BUILTIN(PromiseCreateAndSet, PromiseBuiltinsAssembler) {
Node* const instance = AllocateJSPromise(context);
PromiseSet(instance, status, result);
+
+ Label out(this);
+ GotoUnless(IsPromiseHookEnabled(), &out);
+ CallRuntime(Runtime::kPromiseHookInit, context, instance,
+ UndefinedConstant());
+ Goto(&out);
+ Bind(&out);
Return(instance);
}
@@ -752,7 +776,7 @@ TF_BUILTIN(PromiseThen, PromiseBuiltinsAssembler) {
native_context, Context::INTERNAL_PROMISE_CAPABILITY_INDEX);
Node* const capability =
CallJS(call_callable, context, promise_internal_capability,
- UndefinedConstant());
+ UndefinedConstant(), promise);
var_deferred.Bind(capability);
Goto(&perform_promise_then);
}
@@ -849,6 +873,7 @@ TF_BUILTIN(PromiseHandleReject, PromiseBuiltinsAssembler) {
}
TF_BUILTIN(PromiseHandle, PromiseBuiltinsAssembler) {
+ Node* const promise = Parameter(1);
Node* const value = Parameter(2);
Node* const handler = Parameter(3);
Node* const deferred = Parameter(4);
@@ -865,13 +890,17 @@ TF_BUILTIN(PromiseHandle, PromiseBuiltinsAssembler) {
Variable var_reason(this, MachineRepresentation::kTagged);
Node* const is_debug_active = IsDebugActive();
- Label run_handler(this), if_rejectpromise(this),
- debug_push(this, Label::kDeferred), debug_pop(this, Label::kDeferred);
- Branch(is_debug_active, &debug_push, &run_handler);
+ Label run_handler(this), if_rejectpromise(this), promisehook_before(this),
+ promisehook_after(this), debug_pop(this);
- Bind(&debug_push);
+ GotoUnless(is_debug_active, &promisehook_before);
+ CallRuntime(Runtime::kDebugPushPromise, context, deferred_promise);
+ Goto(&promisehook_before);
+
+ Bind(&promisehook_before);
{
- CallRuntime(Runtime::kDebugPushPromise, context, deferred_promise);
+ GotoUnless(IsPromiseHookEnabled(), &run_handler);
+ CallRuntime(Runtime::kPromiseHookBefore, context, promise);
Goto(&run_handler);
}
@@ -893,14 +922,15 @@ TF_BUILTIN(PromiseHandle, PromiseBuiltinsAssembler) {
Branch(IsUndefined(on_resolve), &if_internalhandler, &if_customhandler);
Bind(&if_internalhandler);
- InternalResolvePromise(context, deferred_promise, result, &debug_pop);
+ InternalResolvePromise(context, deferred_promise, result,
+ &promisehook_after);
Bind(&if_customhandler);
{
Node* const maybe_exception = CallJS(call_callable, context, on_resolve,
UndefinedConstant(), result);
GotoIfException(maybe_exception, &if_rejectpromise, &var_reason);
- Goto(&debug_pop);
+ Goto(&promisehook_after);
}
}
@@ -914,6 +944,13 @@ TF_BUILTIN(PromiseHandle, PromiseBuiltinsAssembler) {
Callable promise_handle_reject = CodeFactory::PromiseHandleReject(isolate);
CallStub(promise_handle_reject, context, deferred_promise, on_reject,
var_reason.value());
+ Goto(&promisehook_after);
+ }
+
+ Bind(&promisehook_after);
+ {
+ GotoUnless(IsPromiseHookEnabled(), &debug_pop);
+ CallRuntime(Runtime::kPromiseHookAfter, context, promise);
Goto(&debug_pop);
}
« no previous file with comments | « src/builtins/builtins.h ('k') | src/code-stub-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698