Index: src/parsing/parser.cc |
diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc |
index 944e84c1235ca7c70dcd9f0b62b901d7dd22b8df..b8e6b9affc581aca97782af5590d65b4d959ff2a 100644 |
--- a/src/parsing/parser.cc |
+++ b/src/parsing/parser.cc |
@@ -5565,8 +5565,11 @@ RegExpTree* RegExpParser::ParseDisjunction() { |
int index = 0; |
if (ParseBackReferenceIndex(&index)) { |
if (state->IsInsideCaptureGroup(index)) { |
- // The backreference is inside the capture group it refers to. |
- // Nothing can possibly have been captured yet. |
+ // The back reference is inside the capture group it refers to. |
+ // Nothing can possibly have been captured yet, so we use empty |
+ // instead. This ensures that, when checking a back reference, |
+ // the capture registers of the referenced capture are either |
+ // both set or both cleared. |
builder->AddEmpty(); |
} else { |
RegExpCapture* capture = GetCapture(index); |