| // 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; |
| } |