Home | History | Annotate | Download | only in regexp
      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