5 #ifndef V8_BUILTINS_BUILTINS_PROMISE_GEN_H_ 6 #define V8_BUILTINS_BUILTINS_PROMISE_GEN_H_ 8 #include "src/code-stub-assembler.h" 9 #include "src/contexts.h" 10 #include "src/objects/promise.h" 11 #include "torque-generated/builtins-base-from-dsl-gen.h" 12 #include "torque-generated/builtins-iterator-from-dsl-gen.h" 17 typedef compiler::CodeAssemblerState CodeAssemblerState;
21 enum PromiseResolvingFunctionContextSlot {
23 kPromiseSlot = Context::MIN_CONTEXT_SLOTS,
31 kPromiseContextLength,
36 enum PromiseAllResolveElementContextSlots {
38 kPromiseAllResolveElementRemainingSlot = Context::MIN_CONTEXT_SLOTS,
41 kPromiseAllResolveElementCapabilitySlot,
44 kPromiseAllResolveElementValuesArraySlot,
46 kPromiseAllResolveElementLength
49 enum FunctionContextSlot {
50 kCapabilitySlot = Context::MIN_CONTEXT_SLOTS,
52 kCapabilitiesContextLength,
59 enum PromiseFinallyContextSlot {
60 kOnFinallySlot = Context::MIN_CONTEXT_SLOTS,
63 kPromiseFinallyContextLength,
68 enum PromiseValueThunkOrReasonContextSlot {
69 kValueSlot = Context::MIN_CONTEXT_SLOTS,
71 kPromiseValueThunkOrReasonContextLength,
81 Node* AllocateAndInitJSPromise(
Node* context);
84 Node* AllocateAndInitJSPromise(
Node* context,
Node* parent);
91 Node* AllocatePromiseReaction(
Node* next,
Node* promise_or_capability,
92 Node* fulfill_handler,
Node* reject_handler);
94 Node* AllocatePromiseReactionJobTask(RootIndex map_root_index,
Node* context,
96 Node* promise_or_capability);
97 Node* AllocatePromiseReactionJobTask(
Node* map,
Node* context,
Node* argument,
99 Node* promise_or_capability);
100 Node* AllocatePromiseResolveThenableJobTask(
Node* promise_to_resolve,
104 std::pair<Node*, Node*> CreatePromiseResolvingFunctions(
105 Node* promise,
Node* native_context,
Node* promise_context);
107 Node* PromiseHasHandler(
Node* promise);
116 Node* CreatePromiseAllResolveElementContext(
Node* promise_capability,
117 Node* native_context);
119 Node* native_context);
121 Node* CreatePromiseResolvingFunctionsContext(
Node* promise,
Node* debug_event,
122 Node* native_context);
124 Node* CreatePromiseGetCapabilitiesExecutorContext(
Node* native_context,
125 Node* promise_capability);
128 void PromiseInit(
Node* promise);
130 void PromiseSetHasHandler(
Node* promise);
131 void PromiseSetHandledHint(
Node* promise);
133 void PerformPromiseThen(
Node* context,
Node* promise,
Node* on_fulfilled,
135 Node* result_promise_or_capability);
137 Node* CreatePromiseContext(
Node* native_context,
int slots);
140 PromiseReaction::Type
type);
146 void BranchIfPromiseResolveLookupChainIntact(
Node* native_context,
149 void GotoIfNotPromiseResolveLookupChainIntact(
Node* native_context,
157 void BranchIfPromiseSpeciesLookupChainIntact(
Node* native_context,
165 void BranchIfPromiseThenLookupChainIntact(
Node* native_context,
171 template <
typename... TArgs>
172 Node* InvokeThen(
Node* native_context,
Node* receiver, TArgs... args);
174 void BranchIfAccessCheckFailed(
Node* context,
Node* native_context,
175 Node* promise_constructor,
Node* executor,
178 std::pair<Node*, Node*> CreatePromiseFinallyFunctions(
Node* on_finally,
180 Node* native_context);
181 Node* CreateValueThunkFunction(
Node* value,
Node* native_context);
183 Node* CreateThrowerFunction(
Node* reason,
Node* native_context);
185 Node* PerformPromiseAll(
187 const IteratorBuiltinsFromDSLAssembler::IteratorRecord& record,
190 void SetForwardingHandlerIfTrue(
Node* context,
Node* condition,
191 const NodeGenerator&
object);
192 inline void SetForwardingHandlerIfTrue(
Node* context,
Node* condition,
194 return SetForwardingHandlerIfTrue(context, condition,
195 [
object]() ->
Node* {
return object; });
197 void SetPromiseHandledByIfTrue(
Node* context,
Node* condition,
Node* promise,
198 const NodeGenerator& handled_by);
202 void PromiseReactionJob(
Node* context,
Node* argument,
Node* handler,
203 Node* promise_or_capability,
204 PromiseReaction::Type
type);
209 Node* AllocateJSPromise(
Node* context);
215 #endif // V8_BUILTINS_BUILTINS_PROMISE_GEN_H_