summaryrefslogtreecommitdiff
path: root/deps/v8/src/regexp/experimental/experimental-compiler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/regexp/experimental/experimental-compiler.cc')
-rw-r--r--deps/v8/src/regexp/experimental/experimental-compiler.cc21
1 files changed, 18 insertions, 3 deletions
diff --git a/deps/v8/src/regexp/experimental/experimental-compiler.cc b/deps/v8/src/regexp/experimental/experimental-compiler.cc
index ce6e0c75ca..566ae06829 100644
--- a/deps/v8/src/regexp/experimental/experimental-compiler.cc
+++ b/deps/v8/src/regexp/experimental/experimental-compiler.cc
@@ -69,6 +69,11 @@ class CanBeHandledVisitor final : private RegExpVisitor {
return nullptr;
}
+ void* VisitClassSetOperand(RegExpClassSetOperand* node, void*) override {
+ result_ = !node->has_strings();
+ return nullptr;
+ }
+
void* VisitClassSetExpression(RegExpClassSetExpression* node,
void*) override {
result_ = false;
@@ -391,11 +396,10 @@ class CompileVisitor : private RegExpVisitor {
return nullptr;
}
- void* VisitClassRanges(RegExpClassRanges* node, void*) override {
+ void CompileCharacterRanges(ZoneList<CharacterRange>* ranges, bool negated) {
// A character class is compiled as Disjunction over its `CharacterRange`s.
- ZoneList<CharacterRange>* ranges = node->ranges(zone_);
CharacterRange::Canonicalize(ranges);
- if (node->is_negated()) {
+ if (negated) {
// The complement of a disjoint, non-adjacent (i.e. `Canonicalize`d)
// union of k intervals is a union of at most k + 1 intervals.
ZoneList<CharacterRange>* negated =
@@ -422,6 +426,17 @@ class CompileVisitor : private RegExpVisitor {
assembler_.ConsumeRange(from_uc16, to_uc16);
});
+ }
+
+ void* VisitClassRanges(RegExpClassRanges* node, void*) override {
+ CompileCharacterRanges(node->ranges(zone_), node->is_negated());
+ return nullptr;
+ }
+
+ void* VisitClassSetOperand(RegExpClassSetOperand* node, void*) override {
+ // TODO(v8:11935): Support strings.
+ DCHECK(!node->has_strings());
+ CompileCharacterRanges(node->ranges(), false);
return nullptr;
}