• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
10 namespace v8 {
11 namespace internal {
12 
13 // Helper methods for C++ regexp builtins.
14 class 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