// 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 CompilationType extends int32 constexpr 'Script::CompilationType';
type CompilationState extends int32 constexpr 'Script::CompilationState';

bitfield struct ScriptFlags extends uint31 {
  compilation_type: CompilationType: 1 bit;
  compilation_state: CompilationState: 1 bit;
  is_repl_mode: bool: 1 bit;
  origin_options: int32: 4 bit;
}

@generateCppClass
extern class Script extends Struct {
  // [source]: the script source.
  source: String|Undefined;

  // [name]: the script name.
  name: Object;

  // [line_offset]: script line offset in resource from where it was extracted.
  line_offset: Smi;

  // [column_offset]: script column offset in resource from where it was
  // extracted.
  column_offset: Smi;

  // [context_data]: context data for the context this script was compiled in.
  context_data: Smi|Undefined|Symbol;

  script_type: Smi;

  // [line_ends]: FixedArray of line ends positions.
  line_ends: FixedArray|Undefined;

  // [id]: the script id.
  id: Smi;

  eval_from_shared_or_wrapped_arguments: SharedFunctionInfo|FixedArray|
      Undefined;
  eval_from_position: Smi|Foreign;  // Smi or Managed<wasm::NativeModule>
  shared_function_infos: WeakFixedArray|WeakArrayList;

  // [flags]: Holds an exciting bitfield.
  flags: SmiTagged<ScriptFlags>;

  // [source_url]: sourceURL from magic comment
  source_url: String|Undefined;

  // [source_mapping_url]: sourceMappingURL magic comment
  source_mapping_url: Object;

  // [host_defined_options]: Options defined by the embedder.
  host_defined_options: FixedArray;
}
