Index: src/regexp/regexp-parser.cc |
diff --git a/src/regexp/regexp-parser.cc b/src/regexp/regexp-parser.cc |
index 3e5998719436e1cfe743e694b2eaf526b46bc377..5c1212ee80d9db975b7089bcc9fcf0cdb214d475 100644 |
--- a/src/regexp/regexp-parser.cc |
+++ b/src/regexp/regexp-parser.cc |
@@ -502,9 +502,9 @@ RegExpTree* RegExpParser::ParseDisjunction() { |
uc32 letter = controlLetter & ~('a' ^ 'A'); |
if (letter < 'A' || 'Z' < letter) { |
// controlLetter is not in range 'A'-'Z' or 'a'-'z'. |
- // This is outside the specification. We match JSC in |
- // reading the backslash as a literal character instead |
- // of as starting an escape. |
+ // Read the backslash as a literal character instead of as |
+ // starting an escape. |
+ // ES#prod-annexB-ExtendedPatternCharacter |
if (unicode()) { |
// With /u, invalid escapes are not treated as identity escapes. |
return ReportError(CStrVector("Invalid unicode escape")); |
@@ -1044,6 +1044,7 @@ uc32 RegExpParser::ParseOctalLiteral() { |
DCHECK(('0' <= current() && current() <= '7') || current() == kEndMarker); |
// For compatibility with some other browsers (not all), we parse |
// up to three octal digits with a value below 256. |
+ // ES#prod-annexB-LegacyOctalEscapeSequence |
uc32 value = current() - '0'; |
Advance(); |
if ('0' <= current() && current() <= '7') { |
@@ -1332,8 +1333,9 @@ uc32 RegExpParser::ParseClassCharacterEscape() { |
case 'c': { |
uc32 controlLetter = Next(); |
uc32 letter = controlLetter & ~('A' ^ 'a'); |
- // For compatibility with JSC, inside a character class. We also accept |
- // digits and underscore as control characters, unless with /u. |
+ // Inside a character class, we also accept digits and underscore as |
+ // control characters, unless with /u. See Annex B: |
+ // ES#prod-annexB-ClassControlLetter |
if (letter >= 'A' && letter <= 'Z') { |
Advance(2); |
// Control letters mapped to ASCII control characters in the range |
@@ -1352,6 +1354,7 @@ uc32 RegExpParser::ParseClassCharacterEscape() { |
} |
// We match JSC in reading the backslash as a literal |
// character instead of as starting an escape. |
+ // TODO(v8:6201): Not yet covered by the spec. |
return '\\'; |
} |
case '0': |
@@ -1371,6 +1374,7 @@ uc32 RegExpParser::ParseClassCharacterEscape() { |
// For compatibility, we interpret a decimal escape that isn't |
// a back reference (and therefore either \0 or not valid according |
// to the specification) as a 1..3 digit octal character code. |
+ // ES#prod-annexB-LegacyOctalEscapeSequence |
if (unicode()) { |
// With /u, decimal escape is not interpreted as octal character code. |
ReportError(CStrVector("Invalid class escape")); |