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

bitfield struct JSRegExpFlags extends uint31 {
  global: bool: 1 bit;
  ignore_case: bool: 1 bit;
  multiline: bool: 1 bit;
  sticky: bool: 1 bit;
  unicode: bool: 1 bit;
  dot_all: bool: 1 bit;
  linear: bool: 1 bit;
}

@generateCppClass
extern class JSRegExp extends JSObject {
  data: FixedArray|Undefined;
  source: String|Undefined;
  flags: SmiTagged<JSRegExpFlags>|Undefined;
}

// Note: Although a condition for a FastJSRegExp is having a positive smi
// lastIndex (see RegExpBuiltinsAssembler::BranchIfFastRegExp), it is possible
// for this to change without transitioning the transient type. As a precaution,
// validate the lastIndex is positive smi when used in fast paths.
transient type FastJSRegExp extends JSRegExp;

extern operator '.global' macro
RegExpBuiltinsAssembler::FastFlagGetterGlobal(FastJSRegExp): bool;
extern operator '.unicode' macro
RegExpBuiltinsAssembler::FastFlagGetterUnicode(FastJSRegExp): bool;
extern operator '.lastIndex' macro
RegExpBuiltinsAssembler::FastLoadLastIndex(FastJSRegExp): Smi;
extern operator '.lastIndex=' macro
RegExpBuiltinsAssembler::FastStoreLastIndex(FastJSRegExp, Smi): void;

extern shape JSRegExpResult extends JSArray {
  // In-object properties:
  // The below fields are externally exposed.
  index: JSAny;
  input: JSAny;
  groups: JSAny;

  // The below fields are for internal use only.
  cached_indices_or_regexp: JSRegExpResultIndices|JSRegExp;
  names: FixedArray|Undefined;
  regexp_input: String;
  regexp_last_index: Smi;
}

extern shape JSRegExpResultIndices extends JSArray {
  // In-object properties:
  // The groups field is externally exposed.
  groups: JSAny;
}
