1// Copyright 2016 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_REGEXP_REGEXP_UTILS_H_
6#define V8_REGEXP_REGEXP_UTILS_H_
7
8#include "src/objects.h"
9
10namespace v8 {
11namespace internal {
12
13// Helper methods for C++ regexp builtins.
14class RegExpUtils : public AllStatic {
15 public:
16  // Last match info accessors.
17  static Handle<String> GenericCaptureGetter(Isolate* isolate,
18                                             Handle<RegExpMatchInfo> match_info,
19                                             int capture, bool* ok = nullptr);
20
21  // Last index (RegExp.lastIndex) accessors.
22  static MUST_USE_RESULT MaybeHandle<Object> SetLastIndex(
23      Isolate* isolate, Handle<JSReceiver> regexp, int value);
24  static MUST_USE_RESULT MaybeHandle<Object> GetLastIndex(
25      Isolate* isolate, Handle<JSReceiver> recv);
26
27  // ES#sec-regexpexec Runtime Semantics: RegExpExec ( R, S )
28  static MUST_USE_RESULT MaybeHandle<Object> RegExpExec(
29      Isolate* isolate, Handle<JSReceiver> regexp, Handle<String> string,
30      Handle<Object> exec);
31
32  // ES#sec-isregexp IsRegExp ( argument )
33  // Includes checking of the match property.
34  static Maybe<bool> IsRegExp(Isolate* isolate, Handle<Object> object);
35
36  // Checks whether the given object is an unmodified JSRegExp instance.
37  // Neither the object's map, nor its prototype's map may be modified.
38  static bool IsUnmodifiedRegExp(Isolate* isolate, Handle<Object> obj);
39
40  // ES#sec-advancestringindex
41  // AdvanceStringIndex ( S, index, unicode )
42  static int AdvanceStringIndex(Isolate* isolate, Handle<String> string,
43                                int index, bool unicode);
44  static MUST_USE_RESULT MaybeHandle<Object> SetAdvancedStringIndex(
45      Isolate* isolate, Handle<JSReceiver> regexp, Handle<String> string,
46      bool unicode);
47};
48
49}  // namespace internal
50}  // namespace v8
51
52#endif  // V8_REGEXP_REGEXP_UTILS_H_
53