| // 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. |
| |
| (function(global, utils, extrasUtils) { |
| |
| "use strict"; |
| |
| %CheckIsBootstrapping(); |
| |
| // ------------------------------------------------------------------- |
| // Imports |
| |
| var AsyncFunctionNext; |
| var AsyncFunctionThrow; |
| var PromiseReject; |
| var PromiseResolve; |
| var PromiseThen; |
| |
| utils.Import(function(from) { |
| AsyncFunctionNext = from.AsyncFunctionNext; |
| AsyncFunctionThrow = from.AsyncFunctionThrow; |
| PromiseReject = from.PromiseCreateRejected; |
| PromiseResolve = from.PromiseCreateResolved; |
| PromiseThen = from.PromiseThen; |
| }); |
| |
| // ------------------------------------------------------------------- |
| |
| function AsyncFunctionAwait(generator, value) { |
| return %_Call( |
| PromiseThen, PromiseResolve(value), |
| function(sentValue) { |
| return %_Call(AsyncFunctionNext, generator, sentValue); |
| }, |
| function(sentError) { |
| return %_Call(AsyncFunctionThrow, generator, sentError); |
| }); |
| } |
| |
| %InstallToContext([ "async_function_await", AsyncFunctionAwait ]); |
| |
| }) |