20class ValueUnwrapContext {
34 context, generator, value, outer_promise,
40 return std::make_pair(on_resolve, on_reject);
67 LoadContextElement(
native_context, Context::PROMISE_PROTOTYPE_INDEX);
69 &if_slow_constructor);
77 BIND(&if_slow_constructor);
82 LoadContextElement(
native_context, Context::PROMISE_FUNCTION_INDEX);
99 value = var_value.value();
102 static const int kClosureContextSize =
109 LoadContextElement(
native_context, Context::AWAIT_CONTEXT_MAP_INDEX));
112 closure_context, Context::kLengthOffset,
125 auto [on_resolve, on_reject] =
133 if_instrumentation_done(
this);
137 &if_instrumentation);
138#ifdef V8_ENABLE_JAVASCRIPT_PROMISE_HOOKS
143 GotoIfNot(IsContextPromiseHookEnabled(promiseHookFlags),
144 &if_instrumentation_done);
145 var_throwaway = NewJSPromise(context, value);
147 Goto(&if_instrumentation_done);
148 BIND(&if_instrumentation);
152 value, outer_promise, on_reject, generator);
153 Goto(&if_instrumentation_done);
155 BIND(&if_instrumentation_done);
158 on_resolve, on_reject, var_throwaway.value());
166 RootIndex::kAsyncIteratorValueUnwrapSharedFun, closure_context,
182 auto value = Parameter<Object>(Descriptor::kValue);
183 auto context = Parameter<Context>(Descriptor::kContext);
186 LoadContextElement(context, ValueUnwrapContext::kDoneSlot);
190 CallBuiltin(Builtin::kCreateIterResultObject, context, value, done);
192 Return(unwrapped_value);
#define CSA_DCHECK(csa,...)
#define TF_BUILTIN(Name, AssemblerBase)
std::function< std::pair< TNode< JSFunction >, TNode< JSFunction > >( TNode< Context >, TNode< NativeContext >)> CreateClosures
TNode< JSFunction > CreateUnwrapClosure(TNode< NativeContext > native_context, TNode< Boolean > done)
TNode< Object > Await(TNode< Context > context, TNode< JSGeneratorObject > generator, TNode< JSAny > value, TNode< JSPromise > outer_promise, const CreateClosures &CreateClosures)
TNode< Context > AllocateAsyncIteratorValueUnwrapContext(TNode< NativeContext > native_context, TNode< Boolean > done)
TNode< BoolT > IsBoolean(TNode< HeapObject > object)
TNode< BoolT > IsPromiseSpeciesProtectorCellInvalid()
TNode< HeapObject > AllocateInNewSpace(TNode< IntPtrT > size, AllocationFlags flags=AllocationFlag::kNone)
TNode< JSAny > GetProperty(TNode< Context > context, TNode< JSAny > receiver, Handle< Name > name)
TNode< BoolT > TaggedEqual(TNode< AnyTaggedT > a, TNode< AnyTaggedT > b)
TNode< JSFunction > AllocateRootFunctionWithContext(RootIndex function, TNode< Context > context, std::optional< TNode< NativeContext > > maybe_native_context)
TNode< JSPrototype > LoadMapPrototype(TNode< Map > map)
TNode< BoolT > IsIsolatePromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate()
void StoreObjectFieldNoWriteBarrier(TNode< HeapObject > object, TNode< IntPtrT > offset, TNode< T > value)
TNode< NativeContext > LoadNativeContext(TNode< Context > context)
TNode< BoolT > TaggedIsSmi(TNode< MaybeObject > a)
void StoreContextElementNoWriteBarrier(TNode< Context > context, int slot_index, TNode< Object > value)
TNode< BoolT > IsJSPromiseMap(TNode< Map > map)
TNode< Map > LoadMap(TNode< HeapObject > object)
TNode< Uint32T > PromiseHookFlags()
void StoreMapNoWriteBarrier(TNode< HeapObject > object, RootIndex map_root_index)
@ MIN_CONTEXT_EXTENDED_SLOTS
static constexpr int SizeFor(int capacity)
void GotoIfNot(TNode< IntegralT > condition, Label *false_label, GotoHint goto_hint=GotoHint::kNone)
Isolate * isolate() const
Factory * factory() const
TNode< Smi > SmiConstant(Tagged< Smi > value)
void GotoIf(TNode< IntegralT > condition, Label *true_label, GotoHint goto_hint=GotoHint::kNone)
TNode< T > CallRuntime(Runtime::FunctionId function, TNode< Object > context, TArgs... args)
TNode< T > CallBuiltin(Builtin id, TNode< Object > context, TArgs... args)
void Branch(TNode< IntegralT > condition, Label *true_label, Label *false_label, BranchHint branch_hint=BranchHint::kNone)
Handle< To > UncheckedCast(Handle< From > value)
!IsContextMap !IsContextMap native_context