| Index: src/ast/ast.h | 
| diff --git a/src/ast/ast.h b/src/ast/ast.h | 
| index b4f2992e047215ac95d2c61b96a98d64afbfb5a1..eae0bda0e10adfb472385b903390a500669bf311 100644 | 
| --- a/src/ast/ast.h | 
| +++ b/src/ast/ast.h | 
| @@ -3180,24 +3180,21 @@ class RegExpLookaround final : public RegExpTree { | 
| class RegExpBackReference final : public RegExpTree { | 
| public: | 
| explicit RegExpBackReference(RegExpCapture* capture) | 
| -      : capture_(capture) { } | 
| +      : capture_(capture), max_match_(kUninitialized) {} | 
| void* Accept(RegExpVisitor* visitor, void* data) override; | 
| RegExpNode* ToNode(RegExpCompiler* compiler, RegExpNode* on_success) override; | 
| RegExpBackReference* AsBackReference() override; | 
| bool IsBackReference() override; | 
| int min_match() override { return 0; } | 
| -  // The capture may not be completely parsed yet, if the reference occurs | 
| -  // before the capture. In the ordinary case, nothing has been captured yet, | 
| -  // so the back reference must have the length 0. If the back reference is | 
| -  // inside a lookbehind, effectively making it a forward reference, we return | 
| -  // 0 since lookbehinds have a length of 0. | 
| -  int max_match() override { | 
| -    return capture_->body() ? capture_->max_match() : 0; | 
| -  } | 
| +  int max_match() override; | 
| int index() { return capture_->index(); } | 
| RegExpCapture* capture() { return capture_; } | 
| private: | 
| +  static const int kUninitialized = -1; | 
| +  static const int kRecursionMarker = -2; | 
| + | 
| RegExpCapture* capture_; | 
| +  int max_match_; | 
| }; | 
|  | 
|  | 
|  |