Index: src/js/harmony-async-await.js |
diff --git a/src/js/harmony-async-await.js b/src/js/harmony-async-await.js |
deleted file mode 100644 |
index b733f3d9fa90b81de782ba79d17916d6101b41ea..0000000000000000000000000000000000000000 |
--- a/src/js/harmony-async-await.js |
+++ /dev/null |
@@ -1,180 +0,0 @@ |
-// 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 GlobalPromise; |
-var IsPromise; |
-var NewPromiseCapability; |
-var PerformPromiseThen; |
-var PromiseCreate; |
-var PromiseNextMicrotaskID; |
-var RejectPromise; |
-var ResolvePromise; |
- |
-utils.Import(function(from) { |
- AsyncFunctionNext = from.AsyncFunctionNext; |
- AsyncFunctionThrow = from.AsyncFunctionThrow; |
- GlobalPromise = from.GlobalPromise; |
- IsPromise = from.IsPromise; |
- NewPromiseCapability = from.NewPromiseCapability; |
- PerformPromiseThen = from.PerformPromiseThen; |
- PromiseCreate = from.PromiseCreate; |
- PromiseNextMicrotaskID = from.PromiseNextMicrotaskID; |
- RejectPromise = from.RejectPromise; |
- ResolvePromise = from.ResolvePromise; |
-}); |
- |
-var promiseAsyncStackIDSymbol = |
- utils.ImportNow("promise_async_stack_id_symbol"); |
-var promiseHandledBySymbol = |
- utils.ImportNow("promise_handled_by_symbol"); |
-var promiseForwardingHandlerSymbol = |
- utils.ImportNow("promise_forwarding_handler_symbol"); |
-var promiseHandledHintSymbol = |
- utils.ImportNow("promise_handled_hint_symbol"); |
-var promiseHasHandlerSymbol = |
- utils.ImportNow("promise_has_handler_symbol"); |
- |
-// ------------------------------------------------------------------- |
- |
-function PromiseCastResolved(value) { |
- if (IsPromise(value)) { |
- return value; |
- } else { |
- var promise = PromiseCreate(); |
- ResolvePromise(promise, value); |
- return promise; |
- } |
-} |
- |
-// ES#abstract-ops-async-function-await |
-// AsyncFunctionAwait ( value ) |
-// Shared logic for the core of await. The parser desugars |
-// await awaited |
-// into |
-// yield AsyncFunctionAwait{Caught,Uncaught}(.generator, awaited, .promise) |
-// The 'awaited' parameter is the value; the generator stands in |
-// for the asyncContext, and .promise is the larger promise under |
-// construction by the enclosing async function. |
-function AsyncFunctionAwait(generator, awaited, outerPromise) { |
- // Promise.resolve(awaited).then( |
- // value => AsyncFunctionNext(value), |
- // error => AsyncFunctionThrow(error) |
- // ); |
- var promise = PromiseCastResolved(awaited); |
- |
- var onFulfilled = sentValue => { |
- %_Call(AsyncFunctionNext, generator, sentValue); |
- // The resulting Promise is a throwaway, so it doesn't matter what it |
- // resolves to. What is important is that we don't end up keeping the |
- // whole chain of intermediate Promises alive by returning the value |
- // of AsyncFunctionNext, as that would create a memory leak. |
- return; |
- }; |
- var onRejected = sentError => { |
- %_Call(AsyncFunctionThrow, generator, sentError); |
- // Similarly, returning the huge Promise here would cause a long |
- // resolution chain to find what the exception to throw is, and |
- // create a similar memory leak, and it does not matter what |
- // sort of rejection this intermediate Promise becomes. |
- return; |
- } |
- |
- // Just forwarding the exception, so no debugEvent for throwawayCapability |
- var throwawayCapability = NewPromiseCapability(GlobalPromise, false); |
- |
- // The Promise will be thrown away and not handled, but it shouldn't trigger |
- // unhandled reject events as its work is done |
- SET_PRIVATE(throwawayCapability.promise, promiseHasHandlerSymbol, true); |
- |
- if (DEBUG_IS_ACTIVE) { |
- if (IsPromise(awaited)) { |
- // Mark the reject handler callback to be a forwarding edge, rather |
- // than a meaningful catch handler |
- SET_PRIVATE(onRejected, promiseForwardingHandlerSymbol, true); |
- } |
- |
- // Mark the dependency to outerPromise in case the throwaway Promise is |
- // found on the Promise stack |
- SET_PRIVATE(throwawayCapability.promise, promiseHandledBySymbol, |
- outerPromise); |
- } |
- |
- PerformPromiseThen(promise, onFulfilled, onRejected, throwawayCapability); |
-} |
- |
-// Called by the parser from the desugaring of 'await' when catch |
-// prediction indicates no locally surrounding catch block |
-function AsyncFunctionAwaitUncaught(generator, awaited, outerPromise) { |
- AsyncFunctionAwait(generator, awaited, outerPromise); |
-} |
- |
-// Called by the parser from the desugaring of 'await' when catch |
-// prediction indicates that there is a locally surrounding catch block |
-function AsyncFunctionAwaitCaught(generator, awaited, outerPromise) { |
- if (DEBUG_IS_ACTIVE && IsPromise(awaited)) { |
- SET_PRIVATE(awaited, promiseHandledHintSymbol, true); |
- } |
- AsyncFunctionAwait(generator, awaited, outerPromise); |
-} |
- |
-// How the parser rejects promises from async/await desugaring |
-function RejectPromiseNoDebugEvent(promise, reason) { |
- return RejectPromise(promise, reason, false); |
-} |
- |
-function AsyncFunctionPromiseCreate() { |
- var promise = PromiseCreate(); |
- if (DEBUG_IS_ACTIVE) { |
- // Push the Promise under construction in an async function on |
- // the catch prediction stack to handle exceptions thrown before |
- // the first await. |
- %DebugPushPromise(promise); |
- // Assign ID and create a recurring task to save stack for future |
- // resumptions from await. |
- var id = PromiseNextMicrotaskID(); |
- SET_PRIVATE(promise, promiseAsyncStackIDSymbol, id); |
- %DebugAsyncTaskEvent({ |
- type: "enqueueRecurring", |
- id: id, |
- name: "async function", |
- }); |
- } |
- return promise; |
-} |
- |
-function AsyncFunctionPromiseRelease(promise) { |
- if (DEBUG_IS_ACTIVE) { |
- // Cancel |
- var id = GET_PRIVATE(promise, promiseAsyncStackIDSymbol); |
- %DebugAsyncTaskEvent({ |
- type: "cancel", |
- id: id, |
- name: "async function", |
- }); |
- // Pop the Promise under construction in an async function on |
- // from catch prediction stack. |
- %DebugPopPromise(); |
- } |
-} |
- |
-%InstallToContext([ |
- "async_function_await_caught", AsyncFunctionAwaitCaught, |
- "async_function_await_uncaught", AsyncFunctionAwaitUncaught, |
- "reject_promise_no_debug_event", RejectPromiseNoDebugEvent, |
- "async_function_promise_create", AsyncFunctionPromiseCreate, |
- "async_function_promise_release", AsyncFunctionPromiseRelease, |
-]); |
- |
-}) |