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

Side by Side Diff: src/builtins/builtins-promise.cc

Issue 2578173004: [promisehook] Fire init hook for promise subclass (Closed)
Patch Set: Fix test 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/isolate.h » ('j') | src/isolate.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/builtins/builtins-promise.h" 5 #include "src/builtins/builtins-promise.h"
6 #include "src/builtins/builtins-utils.h" 6 #include "src/builtins/builtins-utils.h"
7 #include "src/builtins/builtins.h" 7 #include "src/builtins/builtins.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/code-stub-assembler.h" 9 #include "src/code-stub-assembler.h"
10 #include "src/promise-utils.h" 10 #include "src/promise-utils.h"
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 605
606 Node* const executor_map = LoadMap(executor); 606 Node* const executor_map = LoadMap(executor);
607 GotoUnless(IsCallableMap(executor_map), &if_notcallable); 607 GotoUnless(IsCallableMap(executor_map), &if_notcallable);
608 608
609 Node* const native_context = LoadNativeContext(context); 609 Node* const native_context = LoadNativeContext(context);
610 Node* const promise_fun = 610 Node* const promise_fun =
611 LoadContextElement(native_context, Context::PROMISE_FUNCTION_INDEX); 611 LoadContextElement(native_context, Context::PROMISE_FUNCTION_INDEX);
612 Node* const is_debug_active = IsDebugActive(); 612 Node* const is_debug_active = IsDebugActive();
613 Label if_targetisnotmodified(this), 613 Label if_targetisnotmodified(this),
614 if_targetismodified(this, Label::kDeferred), run_executor(this), 614 if_targetismodified(this, Label::kDeferred), run_executor(this),
615 debug_push(this, Label::kDeferred), init(this); 615 debug_push(this), init(this);
616 616
617 Branch(WordEqual(promise_fun, new_target), &if_targetisnotmodified, 617 Branch(WordEqual(promise_fun, new_target), &if_targetisnotmodified,
618 &if_targetismodified); 618 &if_targetismodified);
619 619
620 Variable var_result(this, MachineRepresentation::kTagged), 620 Variable var_result(this, MachineRepresentation::kTagged),
621 var_reject_call(this, MachineRepresentation::kTagged), 621 var_reject_call(this, MachineRepresentation::kTagged),
622 var_reason(this, MachineRepresentation::kTagged); 622 var_reason(this, MachineRepresentation::kTagged);
623 623
624 Bind(&if_targetisnotmodified); 624 Bind(&if_targetisnotmodified);
625 { 625 {
626 Node* const instance = AllocateJSPromise(context); 626 Node* const instance = AllocateJSPromise(context);
627 var_result.Bind(instance); 627 var_result.Bind(instance);
628 GotoUnless(IsPromiseHookEnabled(), &init);
629 CallRuntime(Runtime::kPromiseHookInit, context, instance,
630 UndefinedConstant());
631 Goto(&init); 628 Goto(&init);
632 } 629 }
633 630
634 Bind(&if_targetismodified); 631 Bind(&if_targetismodified);
635 { 632 {
636 Callable fast_new_object_stub = CodeFactory::FastNewObject(isolate); 633 Callable fast_new_object_stub = CodeFactory::FastNewObject(isolate);
637 Node* const instance = 634 Node* const instance =
638 CallStub(fast_new_object_stub, context, promise_fun, new_target); 635 CallStub(fast_new_object_stub, context, promise_fun, new_target);
639 636
640 var_result.Bind(instance); 637 var_result.Bind(instance);
641 Goto(&init); 638 Goto(&init);
642 } 639 }
643 640
644 Bind(&init); 641 Bind(&init);
645 { 642 {
646 PromiseInit(var_result.value()); 643 PromiseInit(var_result.value());
647 Branch(is_debug_active, &debug_push, &run_executor); 644 GotoUnless(IsPromiseHookEnabled(), &debug_push);
645 CallRuntime(Runtime::kPromiseHookInit, context, var_result.value(),
646 UndefinedConstant());
647 Goto(&debug_push);
648 } 648 }
649 649
650 Bind(&debug_push); 650 Bind(&debug_push);
651 { 651 {
652 GotoUnless(is_debug_active, &run_executor);
652 CallRuntime(Runtime::kDebugPushPromise, context, var_result.value()); 653 CallRuntime(Runtime::kDebugPushPromise, context, var_result.value());
653 Goto(&run_executor); 654 Goto(&run_executor);
654 } 655 }
655 656
656 Bind(&run_executor); 657 Bind(&run_executor);
657 { 658 {
658 Label out(this), if_rejectpromise(this), debug_pop(this, Label::kDeferred); 659 Label out(this), if_rejectpromise(this), debug_pop(this, Label::kDeferred);
659 660
660 Node *resolve, *reject; 661 Node *resolve, *reject;
661 std::tie(resolve, reject) = CreatePromiseResolvingFunctions( 662 std::tie(resolve, reject) = CreatePromiseResolvingFunctions(
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 CallRuntime(Runtime::kDebugPopPromise, context); 987 CallRuntime(Runtime::kDebugPopPromise, context);
987 Goto(&out); 988 Goto(&out);
988 989
989 Bind(&out); 990 Bind(&out);
990 Return(UndefinedConstant()); 991 Return(UndefinedConstant());
991 } 992 }
992 } 993 }
993 994
994 } // namespace internal 995 } // namespace internal
995 } // namespace v8 996 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/isolate.h » ('j') | src/isolate.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698