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

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

Issue 2760953002: [builtins] Move more files into v8_builtins_generators source set (Closed)
Patch Set: rebased Created 3 years, 9 months 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 | « src/builtins/builtins-forin-gen.cc ('k') | src/builtins/builtins-promise-gen.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef V8_BUILTINS_BUILTINS_PROMISE_H_
6 #define V8_BUILTINS_BUILTINS_PROMISE_H_
7
8 #include "src/code-stub-assembler.h"
9 #include "src/contexts.h"
10
11 namespace v8 {
12 namespace internal {
13
14 typedef compiler::CodeAssemblerState CodeAssemblerState;
15
16 class PromiseBuiltinsAssembler : public CodeStubAssembler {
17 public:
18 enum PromiseResolvingFunctionContextSlot {
19 // Whether the resolve/reject callback was already called.
20 kAlreadyVisitedSlot = Context::MIN_CONTEXT_SLOTS,
21
22 // The promise which resolve/reject callbacks fulfill.
23 kPromiseSlot,
24
25 // Whether to trigger a debug event or not. Used in catch
26 // prediction.
27 kDebugEventSlot,
28 kPromiseContextLength,
29 };
30
31 enum FunctionContextSlot {
32 kCapabilitySlot = Context::MIN_CONTEXT_SLOTS,
33
34 kCapabilitiesContextLength,
35 };
36
37 // This is used by the PromiseThenFinally and PromiseCatchFinally
38 // builtins to store the onFinally in the onFinallySlot.
39 //
40 // This is also used by the PromiseValueThunkFinally to store the
41 // value in the onFinallySlot and PromiseThrowerFinally to store the
42 // reason in the onFinallySlot.
43 enum PromiseFinallyContextSlot {
44 kOnFinallySlot = Context::MIN_CONTEXT_SLOTS,
45
46 kOnFinallyContextLength,
47 };
48
49 explicit PromiseBuiltinsAssembler(compiler::CodeAssemblerState* state)
50 : CodeStubAssembler(state) {}
51 // These allocate and initialize a promise with pending state and
52 // undefined fields.
53 //
54 // This uses undefined as the parent promise for the promise init
55 // hook.
56 Node* AllocateAndInitJSPromise(Node* context);
57 // This uses the given parent as the parent promise for the promise
58 // init hook.
59 Node* AllocateAndInitJSPromise(Node* context, Node* parent);
60
61 // This allocates and initializes a promise with the given state and
62 // fields.
63 Node* AllocateAndSetJSPromise(Node* context, Node* status, Node* result);
64
65 Node* AllocatePromiseResolveThenableJobInfo(Node* result, Node* then,
66 Node* resolve, Node* reject,
67 Node* context);
68
69 std::pair<Node*, Node*> CreatePromiseResolvingFunctions(
70 Node* promise, Node* native_context, Node* promise_context);
71
72 Node* PromiseHasHandler(Node* promise);
73
74 Node* CreatePromiseResolvingFunctionsContext(Node* promise, Node* debug_event,
75 Node* native_context);
76
77 Node* CreatePromiseGetCapabilitiesExecutorContext(Node* native_context,
78 Node* promise_capability);
79
80 Node* NewPromiseCapability(Node* context, Node* constructor,
81 Node* debug_event = nullptr);
82
83 protected:
84 void PromiseInit(Node* promise);
85
86 Node* ThrowIfNotJSReceiver(Node* context, Node* value,
87 MessageTemplate::Template msg_template,
88 const char* method_name = nullptr);
89
90 Node* SpeciesConstructor(Node* context, Node* object,
91 Node* default_constructor);
92
93 void PromiseSetHasHandler(Node* promise);
94 void PromiseSetHandledHint(Node* promise);
95
96 void AppendPromiseCallback(int offset, compiler::Node* promise,
97 compiler::Node* value);
98
99 Node* InternalPromiseThen(Node* context, Node* promise, Node* on_resolve,
100 Node* on_reject);
101
102 Node* InternalPerformPromiseThen(Node* context, Node* promise,
103 Node* on_resolve, Node* on_reject,
104 Node* deferred_promise,
105 Node* deferred_on_resolve,
106 Node* deferred_on_reject);
107
108 void InternalResolvePromise(Node* context, Node* promise, Node* result);
109
110 void BranchIfFastPath(Node* context, Node* promise, Label* if_isunmodified,
111 Label* if_ismodified);
112
113 void BranchIfFastPath(Node* native_context, Node* promise_fun, Node* promise,
114 Label* if_isunmodified, Label* if_ismodified);
115
116 Node* CreatePromiseContext(Node* native_context, int slots);
117 void PromiseFulfill(Node* context, Node* promise, Node* result,
118 v8::Promise::PromiseState status);
119
120 void BranchIfAccessCheckFailed(Node* context, Node* native_context,
121 Node* promise_constructor, Node* executor,
122 Label* if_noaccess);
123
124 void InternalPromiseReject(Node* context, Node* promise, Node* value,
125 bool debug_event);
126 void InternalPromiseReject(Node* context, Node* promise, Node* value,
127 Node* debug_event);
128 std::pair<Node*, Node*> CreatePromiseFinallyFunctions(Node* on_finally,
129 Node* native_context);
130 Node* CreatePromiseFinallyContext(Node* on_finally, Node* native_context);
131
132 Node* CreateValueThunkFunction(Node* value, Node* native_context);
133 Node* CreateValueThunkFunctionContext(Node* value, Node* native_context);
134
135 Node* CreateThrowerFunctionContext(Node* reason, Node* native_context);
136 Node* CreateThrowerFunction(Node* reason, Node* native_context);
137
138 private:
139 Node* AllocateJSPromise(Node* context);
140 };
141
142 } // namespace internal
143 } // namespace v8
144
145 #endif // V8_BUILTINS_BUILTINS_PROMISE_H_
OLDNEW
« no previous file with comments | « src/builtins/builtins-forin-gen.cc ('k') | src/builtins/builtins-promise-gen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698