Reviewers: Mads Ager, Message: Quick review.
Description: RegExp parser forgot to advance after reading \c in character class. I.e., \cM was interpreted as \ccM. Please review this at http://codereview.chromium.org/18654 Affected files: M src/parser.cc M test/mjsunit/regexp.js Index: src/parser.cc diff --git a/src/parser.cc b/src/parser.cc index c8dbb36717594fba97c4967e450681a519de512a..9e7b4b311ecd6ab3888ea9e73dff68c350652759 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -4052,6 +4052,7 @@ uc32 RegExpParser::ParseClassCharacterEscape() { Advance(); return '\v'; case 'c': + Advance(); return ParseControlLetterEscape(); case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': Index: test/mjsunit/regexp.js diff --git a/test/mjsunit/regexp.js b/test/mjsunit/regexp.js index 4422211f2ccdc7b619c88f52df9ce1ce8eb87a14..50a024f1b9e357fd623462612df1b4ec4c3ef478 100644 --- a/test/mjsunit/regexp.js +++ b/test/mjsunit/regexp.js @@ -94,6 +94,14 @@ assertFalse(/\ca/.test( "\\ca" )); //assertTrue(/\c[a/]/.test( "\x1ba/]" )); +// Test \c in character class +re = /[\cM]/; +assertTrue(re.test("\r")); +assertFalse(re.test("M")); +assertFalse(re.test("c")); +assertFalse(re.test("\x03")); // I.e., read as \cc + + // Test that we handle \s and \S correctly inside some bizarre // character classes. re = /[\s-:]/; --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
