1// Copyright 2019 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5extern class PromiseCapability extends Struct {
6  promise: JSReceiver|Undefined;
7  // TODO(joshualitt): Can these be typed more specifically.
8  resolve: Object;
9  reject: Object;
10}
11
12// PromiseReaction constants
13type PromiseReactionType extends int31 constexpr 'PromiseReaction::Type';
14const kPromiseReactionFulfill: constexpr PromiseReactionType
15    generates 'PromiseReaction::kFulfill';
16const kPromiseReactionReject: constexpr PromiseReactionType
17    generates 'PromiseReaction::kReject';
18const kPromiseReactionSize:
19    constexpr int31 generates 'PromiseReaction::kSize';
20const kPromiseReactionFulfillHandlerOffset: constexpr int31
21    generates 'PromiseReaction::kFulfillHandlerOffset';
22const kPromiseReactionPromiseOrCapabilityOffset: constexpr int31
23    generates 'PromiseReaction::kPromiseOrCapabilityOffset';
24const kPromiseReactionContinuationPreservedEmbedderDataOffset: constexpr int31
25    generates 'PromiseReaction::kContinuationPreservedEmbedderDataOffset';
26
27extern class PromiseReaction extends Struct {
28  next: PromiseReaction|Zero;
29  reject_handler: Callable|Undefined;
30  fulfill_handler: Callable|Undefined;
31  // Either a JSPromise (in case of native promises), a PromiseCapability
32  // (general case), or undefined (in case of await).
33  promise_or_capability: JSPromise|PromiseCapability|Undefined;
34  continuation_preserved_embedder_data: Object|Undefined;
35}
36
37// PromiseReactionJobTask constants
38const kPromiseReactionJobTaskSizeOfAllPromiseReactionJobTasks: constexpr int31
39    generates 'PromiseReactionJobTask::kSizeOfAllPromiseReactionJobTasks';
40const kPromiseReactionJobTaskHandlerOffset: constexpr int31
41    generates 'PromiseReactionJobTask::kHandlerOffset';
42const kPromiseReactionJobTaskPromiseOrCapabilityOffset: constexpr int31
43    generates 'PromiseReactionJobTask::kPromiseOrCapabilityOffset';
44const kPromiseReactionJobTaskContinuationPreservedEmbedderDataOffset:
45    constexpr int31
46    generates 'PromiseReactionJobTask::kContinuationPreservedEmbedderDataOffset'
47    ;
48
49@abstract
50extern class PromiseReactionJobTask extends Microtask {
51  argument: Object;
52  context: Context;
53  handler: Callable|Undefined;
54  // Either a JSPromise (in case of native promises), a PromiseCapability
55  // (general case), or undefined (in case of await).
56  promise_or_capability: JSPromise|PromiseCapability|Undefined;
57  continuation_preserved_embedder_data: Object|Undefined;
58}
59
60extern class PromiseFulfillReactionJobTask extends PromiseReactionJobTask {}
61
62extern class PromiseRejectReactionJobTask extends PromiseReactionJobTask {}
63
64extern class PromiseResolveThenableJobTask extends Microtask {
65  context: Context;
66  promise_to_resolve: JSPromise;
67  thenable: JSReceiver;
68  then: JSReceiver;
69}
70