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
-~----------~----~----~----~------~----~------~--~---

Reply via email to