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