@ 261106.4
current
// Copyright 2019 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.

@cppObjectLayoutDefinition
@abstract
extern class Microtask extends Struct {
  @if(V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA)
  continuation_preserved_embedder_data: Object|Undefined;
}

@cppObjectLayoutDefinition
extern class CallbackTask extends Microtask {
  callback: Foreign;
  data: Object;
}

@cppObjectLayoutDefinition
extern class CallableTask extends Microtask {
  callable: JSReceiver;
  context: NativeContext;
}

// Specialized microtask for resuming async generators/functions when the
// awaited/yielded value is a non-thenable.  Avoids closure allocation and
// indirect Call dispatch.  The |kind| field selects the resume behaviour.
@cppObjectLayoutDefinition
extern class AsyncResumeTask extends Microtask {
  generator: JSGeneratorObject;
  value: Object;
  kind: Smi;
}