• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 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_EXPERIMENTAL_EXPERIMENTAL_COMPILER_H_
6 #define V8_REGEXP_EXPERIMENTAL_EXPERIMENTAL_COMPILER_H_
7 
8 #include "src/regexp/experimental/experimental-bytecode.h"
9 #include "src/regexp/regexp-ast.h"
10 #include "src/regexp/regexp-flags.h"
11 #include "src/zone/zone-list.h"
12 
13 namespace v8 {
14 namespace internal {
15 
16 class ExperimentalRegExpCompiler final : public AllStatic {
17  public:
18   // Checks whether a given RegExpTree can be compiled into an experimental
19   // bytecode program.  This mostly amounts to the absence of back references,
20   // but see the definition.
21   // TODO(mbid,v8:10765): Currently more things are not handled, e.g. some
22   // quantifiers and unicode.
23   static bool CanBeHandled(RegExpTree* tree, RegExpFlags flags,
24                            int capture_count);
25   // Compile regexp into a bytecode program.  The regexp must be handlable by
26   // the experimental engine; see`CanBeHandled`.  The program is returned as a
27   // ZoneList backed by the same Zone that is used in the RegExpTree argument.
28   static ZoneList<RegExpInstruction> Compile(RegExpTree* tree,
29                                              RegExpFlags flags, Zone* zone);
30 };
31 
32 }  // namespace internal
33 }  // namespace v8
34 
35 #endif  // V8_REGEXP_EXPERIMENTAL_EXPERIMENTAL_COMPILER_H_
36