/src/node/deps/v8/include/v8-regexp.h
Line  | Count  | Source  | 
1  |  | // Copyright 2021 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 INCLUDE_V8_REGEXP_H_  | 
6  |  | #define INCLUDE_V8_REGEXP_H_  | 
7  |  |  | 
8  |  | #include "v8-local-handle.h"  // NOLINT(build/include_directory)  | 
9  |  | #include "v8-object.h"        // NOLINT(build/include_directory)  | 
10  |  | #include "v8config.h"         // NOLINT(build/include_directory)  | 
11  |  |  | 
12  |  | namespace v8 { | 
13  |  |  | 
14  |  | class Context;  | 
15  |  |  | 
16  |  | /**  | 
17  |  |  * An instance of the built-in RegExp constructor (ECMA-262, 15.10).  | 
18  |  |  */  | 
19  |  | class V8_EXPORT RegExp : public Object { | 
20  |  |  public:  | 
21  |  |   /**  | 
22  |  |    * Regular expression flag bits. They can be or'ed to enable a set  | 
23  |  |    * of flags.  | 
24  |  |    * The kLinear value ('l') is experimental and can only be used with | 
25  |  |    * --enable-experimental-regexp-engine.  RegExps with kLinear flag are  | 
26  |  |    *  guaranteed to be executed in asymptotic linear time wrt. the length of  | 
27  |  |    *  the subject string.  | 
28  |  |    */  | 
29  |  |   enum Flags { | 
30  |  |     kNone = 0,  | 
31  |  |     kGlobal = 1 << 0,  | 
32  |  |     kIgnoreCase = 1 << 1,  | 
33  |  |     kMultiline = 1 << 2,  | 
34  |  |     kSticky = 1 << 3,  | 
35  |  |     kUnicode = 1 << 4,  | 
36  |  |     kDotAll = 1 << 5,  | 
37  |  |     kLinear = 1 << 6,  | 
38  |  |     kHasIndices = 1 << 7,  | 
39  |  |     kUnicodeSets = 1 << 8,  | 
40  |  |   };  | 
41  |  |  | 
42  |  |   static constexpr int kFlagCount = 9;  | 
43  |  |  | 
44  |  |   /**  | 
45  |  |    * Creates a regular expression from the given pattern string and  | 
46  |  |    * the flags bit field. May throw a JavaScript exception as  | 
47  |  |    * described in ECMA-262, 15.10.4.1.  | 
48  |  |    *  | 
49  |  |    * For example,  | 
50  |  |    *   RegExp::New(v8::String::New("foo"), | 
51  |  |    *               static_cast<RegExp::Flags>(kGlobal | kMultiline))  | 
52  |  |    * is equivalent to evaluating "/foo/gm".  | 
53  |  |    */  | 
54  |  |   static V8_WARN_UNUSED_RESULT MaybeLocal<RegExp> New(Local<Context> context,  | 
55  |  |                                                       Local<String> pattern,  | 
56  |  |                                                       Flags flags);  | 
57  |  |  | 
58  |  |   /**  | 
59  |  |    * Like New, but additionally specifies a backtrack limit. If the number of  | 
60  |  |    * backtracks done in one Exec call hits the limit, a match failure is  | 
61  |  |    * immediately returned.  | 
62  |  |    */  | 
63  |  |   static V8_WARN_UNUSED_RESULT MaybeLocal<RegExp> NewWithBacktrackLimit(  | 
64  |  |       Local<Context> context, Local<String> pattern, Flags flags,  | 
65  |  |       uint32_t backtrack_limit);  | 
66  |  |  | 
67  |  |   /**  | 
68  |  |    * Executes the current RegExp instance on the given subject string.  | 
69  |  |    * Equivalent to RegExp.prototype.exec as described in  | 
70  |  |    *  | 
71  |  |    *   https://tc39.es/ecma262/#sec-regexp.prototype.exec  | 
72  |  |    *  | 
73  |  |    * On success, an Array containing the matched strings is returned. On  | 
74  |  |    * failure, returns Null.  | 
75  |  |    *  | 
76  |  |    * Note: modifies global context state, accessible e.g. through RegExp.input.  | 
77  |  |    */  | 
78  |  |   V8_WARN_UNUSED_RESULT MaybeLocal<Object> Exec(Local<Context> context,  | 
79  |  |                                                 Local<String> subject);  | 
80  |  |  | 
81  |  |   /**  | 
82  |  |    * Returns the value of the source property: a string representing  | 
83  |  |    * the regular expression.  | 
84  |  |    */  | 
85  |  |   Local<String> GetSource() const;  | 
86  |  |  | 
87  |  |   /**  | 
88  |  |    * Returns the flags bit field.  | 
89  |  |    */  | 
90  |  |   Flags GetFlags() const;  | 
91  |  |  | 
92  | 0  |   V8_INLINE static RegExp* Cast(Value* value) { | 
93  | 0  | #ifdef V8_ENABLE_CHECKS  | 
94  | 0  |     CheckCast(value);  | 
95  | 0  | #endif  | 
96  | 0  |     return static_cast<RegExp*>(value);  | 
97  | 0  |   }  | 
98  |  |  | 
99  |  |  private:  | 
100  |  |   static void CheckCast(Value* obj);  | 
101  |  | };  | 
102  |  |  | 
103  |  | }  // namespace v8  | 
104  |  |  | 
105  |  | #endif  // INCLUDE_V8_REGEXP_H_  |