summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/builtins-async-generator-gen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/builtins/builtins-async-generator-gen.cc')
-rw-r--r--deps/v8/src/builtins/builtins-async-generator-gen.cc80
1 files changed, 48 insertions, 32 deletions
diff --git a/deps/v8/src/builtins/builtins-async-generator-gen.cc b/deps/v8/src/builtins/builtins-async-generator-gen.cc
index b3cb3d8ebd..72a6a496b7 100644
--- a/deps/v8/src/builtins/builtins-async-generator-gen.cc
+++ b/deps/v8/src/builtins/builtins-async-generator-gen.cc
@@ -113,7 +113,8 @@ class AsyncGeneratorBuiltinsAssembler : public AsyncBuiltinsAssembler {
return SmiNotEqual(resume_type, SmiConstant(JSGeneratorObject::kNext));
}
- void AsyncGeneratorEnqueue(Node* context, Node* generator, Node* value,
+ void AsyncGeneratorEnqueue(CodeStubArguments* args, Node* context,
+ Node* generator, Node* value,
JSAsyncGeneratorObject::ResumeMode resume_mode,
const char* method_name);
@@ -138,7 +139,7 @@ class AsyncGeneratorBuiltinsAssembler : public AsyncBuiltinsAssembler {
// Shared implementation for the 3 Async Iterator protocol methods of Async
// Generators.
void AsyncGeneratorBuiltinsAssembler::AsyncGeneratorEnqueue(
- Node* context, Node* generator, Node* value,
+ CodeStubArguments* args, Node* context, Node* generator, Node* value,
JSAsyncGeneratorObject::ResumeMode resume_mode, const char* method_name) {
// AsyncGeneratorEnqueue produces a new Promise, and appends it to the list
// of async generator requests to be executed. If the generator is not
@@ -175,18 +176,18 @@ void AsyncGeneratorBuiltinsAssembler::AsyncGeneratorEnqueue(
Goto(&done);
BIND(&done);
- Return(promise);
+ args->PopAndReturn(promise);
}
BIND(&if_receiverisincompatible);
{
Node* const error =
MakeTypeError(MessageTemplate::kIncompatibleMethodReceiver, context,
- CStringConstant(method_name), generator);
+ StringConstant(method_name), generator);
CallBuiltin(Builtins::kRejectNativePromise, context, promise, error,
TrueConstant());
- Return(promise);
+ args->PopAndReturn(promise);
}
}
@@ -231,18 +232,16 @@ void AsyncGeneratorBuiltinsAssembler::AsyncGeneratorAwaitResumeClosure(
CSA_SLOW_ASSERT(this, IsGeneratorSuspended(generator));
CallStub(CodeFactory::ResumeGenerator(isolate()), context, value, generator,
- SmiConstant(resume_mode),
- SmiConstant(static_cast<int>(SuspendFlags::kAsyncGeneratorAwait)));
+ SmiConstant(resume_mode));
- TailCallStub(CodeFactory::AsyncGeneratorResumeNext(isolate()), context,
- generator);
+ TailCallBuiltin(Builtins::kAsyncGeneratorResumeNext, context, generator);
}
template <typename Descriptor>
void AsyncGeneratorBuiltinsAssembler::AsyncGeneratorAwait(bool is_catchable) {
- Node* generator = Parameter(1);
- Node* value = Parameter(2);
- Node* context = Parameter(5);
+ Node* generator = Parameter(Descriptor::kReceiver);
+ Node* value = Parameter(Descriptor::kAwaited);
+ Node* context = Parameter(Descriptor::kContext);
CSA_SLOW_ASSERT(this,
HasInstanceType(generator, JS_ASYNC_GENERATOR_OBJECT_TYPE));
@@ -250,12 +249,9 @@ void AsyncGeneratorBuiltinsAssembler::AsyncGeneratorAwait(bool is_catchable) {
Node* const request = LoadFirstAsyncGeneratorRequestFromQueue(generator);
CSA_ASSERT(this, WordNotEqual(request, UndefinedConstant()));
- NodeGenerator1 closure_context = [&](Node* native_context) -> Node* {
- Node* const context =
- CreatePromiseContext(native_context, AwaitContext::kLength);
+ ContextInitializer init_closure_context = [&](Node* context) {
StoreContextElementNoWriteBarrier(context, AwaitContext::kGeneratorSlot,
generator);
- return context;
};
Node* outer_promise =
@@ -265,8 +261,8 @@ void AsyncGeneratorBuiltinsAssembler::AsyncGeneratorAwait(bool is_catchable) {
const int reject_index = Context::ASYNC_GENERATOR_AWAIT_REJECT_SHARED_FUN;
Node* promise =
- Await(context, generator, value, outer_promise, closure_context,
- resolve_index, reject_index, is_catchable);
+ Await(context, generator, value, outer_promise, AwaitContext::kLength,
+ init_closure_context, resolve_index, reject_index, is_catchable);
CSA_SLOW_ASSERT(this, IsGeneratorNotSuspendedForAwait(generator));
StoreObjectField(generator, JSAsyncGeneratorObject::kAwaitedPromiseOffset,
@@ -330,10 +326,17 @@ Node* AsyncGeneratorBuiltinsAssembler::TakeFirstAsyncGeneratorRequestFromQueue(
// https://tc39.github.io/proposal-async-iteration/
// Section #sec-asyncgenerator-prototype-next
TF_BUILTIN(AsyncGeneratorPrototypeNext, AsyncGeneratorBuiltinsAssembler) {
- Node* const generator = Parameter(Descriptor::kReceiver);
- Node* const value = Parameter(Descriptor::kValue);
- Node* const context = Parameter(Descriptor::kContext);
- AsyncGeneratorEnqueue(context, generator, value,
+ const int kValueArg = 0;
+
+ Node* argc =
+ ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount));
+ CodeStubArguments args(this, argc);
+
+ Node* generator = args.GetReceiver();
+ Node* value = args.GetOptionalArgumentValue(kValueArg);
+ Node* context = Parameter(BuiltinDescriptor::kContext);
+
+ AsyncGeneratorEnqueue(&args, context, generator, value,
JSAsyncGeneratorObject::kNext,
"[AsyncGenerator].prototype.next");
}
@@ -341,10 +344,17 @@ TF_BUILTIN(AsyncGeneratorPrototypeNext, AsyncGeneratorBuiltinsAssembler) {
// https://tc39.github.io/proposal-async-iteration/
// Section #sec-asyncgenerator-prototype-return
TF_BUILTIN(AsyncGeneratorPrototypeReturn, AsyncGeneratorBuiltinsAssembler) {
- Node* generator = Parameter(Descriptor::kReceiver);
- Node* value = Parameter(Descriptor::kValue);
- Node* context = Parameter(Descriptor::kContext);
- AsyncGeneratorEnqueue(context, generator, value,
+ const int kValueArg = 0;
+
+ Node* argc =
+ ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount));
+ CodeStubArguments args(this, argc);
+
+ Node* generator = args.GetReceiver();
+ Node* value = args.GetOptionalArgumentValue(kValueArg);
+ Node* context = Parameter(BuiltinDescriptor::kContext);
+
+ AsyncGeneratorEnqueue(&args, context, generator, value,
JSAsyncGeneratorObject::kReturn,
"[AsyncGenerator].prototype.return");
}
@@ -352,10 +362,17 @@ TF_BUILTIN(AsyncGeneratorPrototypeReturn, AsyncGeneratorBuiltinsAssembler) {
// https://tc39.github.io/proposal-async-iteration/
// Section #sec-asyncgenerator-prototype-throw
TF_BUILTIN(AsyncGeneratorPrototypeThrow, AsyncGeneratorBuiltinsAssembler) {
- Node* generator = Parameter(Descriptor::kReceiver);
- Node* value = Parameter(Descriptor::kValue);
- Node* context = Parameter(Descriptor::kContext);
- AsyncGeneratorEnqueue(context, generator, value,
+ const int kValueArg = 0;
+
+ Node* argc =
+ ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount));
+ CodeStubArguments args(this, argc);
+
+ Node* generator = args.GetReceiver();
+ Node* value = args.GetOptionalArgumentValue(kValueArg);
+ Node* context = Parameter(BuiltinDescriptor::kContext);
+
+ AsyncGeneratorEnqueue(&args, context, generator, value,
JSAsyncGeneratorObject::kThrow,
"[AsyncGenerator].prototype.throw");
}
@@ -461,8 +478,7 @@ TF_BUILTIN(AsyncGeneratorResumeNext, AsyncGeneratorBuiltinsAssembler) {
BIND(&resume_generator);
{
CallStub(CodeFactory::ResumeGenerator(isolate()), context,
- LoadValueFromAsyncGeneratorRequest(next), generator, resume_type,
- SmiConstant(static_cast<int>(SuspendFlags::kAsyncGeneratorYield)));
+ LoadValueFromAsyncGeneratorRequest(next), generator, resume_type);
var_state.Bind(LoadGeneratorState(generator));
var_next.Bind(LoadFirstAsyncGeneratorRequestFromQueue(generator));
Goto(&start);