// 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.

type SourceTextModuleInfo extends FixedArray;

bitfield struct SourceTextModuleFlags extends uint31 {
  async: bool: 1 bit;
  async_evaluating: bool: 1 bit;
}

@generateCppClass
extern class SourceTextModule extends Module {
  // The code representing this module, or an abstraction thereof.
  code: SharedFunctionInfo|JSFunction|JSGeneratorObject|SourceTextModuleInfo;

  // Arrays of cells corresponding to regular exports and regular imports.
  // A cell's position in the array is determined by the cell index of the
  // associated module entry (which coincides with the variable index of the
  // associated variable).
  regular_exports: FixedArray;
  regular_imports: FixedArray;

  // Modules imported or re-exported by this module.
  // Corresponds 1-to-1 to the module specifier strings in
  // SourceTextModuleInfo::module_requests.
  requested_modules: FixedArray;

  // Script from which the module originates.
  script: Script;

  // The value of import.meta inside of this module.
  // Lazily initialized on first access. It's the hole before first access and
  // a JSObject afterwards.
  import_meta: TheHole|JSObject;

  async_parent_modules: ArrayList;
  top_level_capability: JSPromise|Undefined;

  // TODO(neis): Don't store those in the module object?
  dfs_index: Smi;
  dfs_ancestor_index: Smi;

  // The number of currently evaluating async dependencies of this module.
  pending_async_dependencies: Smi;

  flags: SmiTagged<SourceTextModuleFlags>;
}

@generateCppClass
@generatePrint
extern class ModuleRequest extends Struct {
  specifier: String;

  // Import assertions are stored in this array in the form:
  // [key1, value1, location1, key2, value2, location2, ...]
  import_assertions: FixedArray;
}

@generateCppClass
extern class SourceTextModuleInfoEntry extends Struct {
  export_name: String|Undefined;
  local_name: String|Undefined;
  import_name: String|Undefined;
  module_request: Smi;
  cell_index: Smi;
  beg_pos: Smi;
  end_pos: Smi;
}
