Index: src/builtins/builtins-async.h |
diff --git a/src/builtins/builtins-async.h b/src/builtins/builtins-async.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..811d3db296c574be5bf190d03950812e9e6fdadb |
--- /dev/null |
+++ b/src/builtins/builtins-async.h |
@@ -0,0 +1,68 @@ |
+// Copyright 2016 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "src/builtins/builtins-promise.h" |
+ |
+namespace v8 { |
+namespace internal { |
+ |
+class AsyncBuiltinsAssembler : public PromiseBuiltinsAssembler { |
+ public: |
+ explicit AsyncBuiltinsAssembler(CodeAssemblerState* state) |
+ : PromiseBuiltinsAssembler(state) {} |
+ |
+ // Async Generator: |
+ void AsyncGeneratorResumeNext(Node* context, Node* generator, |
+ Node* continuation); |
+ void AsyncGeneratorResumeNext(Node* context, Node* generator) { |
+ Node* continuation = |
+ LoadObjectField(generator, JSAsyncGeneratorObject::kContinuationOffset); |
+ AsyncGeneratorResumeNext(context, generator, continuation); |
+ } |
+ |
+ Node* TakeFirstAsyncGeneratorRequestFromQueue(Node* generator); |
+ void AddAsyncGeneratorRequestToQueue(Node* generator, Node* request); |
+ |
+ Node* AllocateAsyncGeneratorRequest( |
+ JSAsyncGeneratorObject::ResumeMode resume_mode, Node* resume_value, |
+ Node* promise); |
+ |
+ // Async Iterator |
+ Node* AllocateAsyncIteratorValueUnwrapContext(Node* native_context, |
+ Node* done); |
+ |
+ protected: |
+ // Async Generator shared |
+ void AsyncGeneratorEnqueue(Node* context, Node* generator, Node* value, |
+ JSAsyncGeneratorObject::ResumeMode resume_mode, |
+ const char* method_name); |
+ |
+ void AsyncGeneratorAwaitResumeClosure( |
+ Node* context, Node* value, |
+ JSAsyncGeneratorObject::ResumeMode resume_mode); |
+ |
+ typedef std::function<Node*(Node*)> NodeGenerator1; |
+ |
+ // Perform steps to resume generator after `value` is resolved. |
+ // `on_reject_context_index` is an index into the Native Context, which should |
+ // point to a SharedFunctioninfo instance used to create the closure. The |
+ // value following the reject index should be a similar value for the resolve |
+ // closure. Returns the Promise-wrapped `value`. |
+ Node* Await(Node* context, Node* generator, Node* value, Node* outer_promise, |
+ const NodeGenerator1& create_closure_context, |
+ int on_resolve_context_index, int on_reject_context_index, |
+ bool is_catchable); |
+ |
+ // Shared implementation of the catchable and uncatchable variations of Await |
+ // for AsyncGenerators. |
+ void AsyncGeneratorAwait(bool is_catchable); |
+ |
+ private: |
+ // Async Generator private |
+ void AsyncGeneratorResumeNextStep(Node* context, Node* generator, Node* req, |
+ Node* continuation); |
+}; |
+ |
+} // namespace internal |
+} // namespace v8 |