Revision: 12036
Author:   [email protected]
Date:     Wed Jul 11 00:47:29 2012
Log:      Sync preparser and parser wrt syntax error in switch..case.

[email protected]
BUG=v8:2210
TEST=test-parsing/ParserSync

Review URL: https://chromiumcodereview.appspot.com/10701116
http://code.google.com/p/v8/source/detail?r=12036

Modified:
 /branches/bleeding_edge/src/preparser.cc
 /branches/bleeding_edge/test/cctest/test-parsing.cc

=======================================
--- /branches/bleeding_edge/src/preparser.cc    Mon Apr 30 06:04:08 2012
+++ /branches/bleeding_edge/src/preparser.cc    Wed Jul 11 00:47:29 2012
@@ -602,14 +602,17 @@
     if (token == i::Token::CASE) {
       Expect(i::Token::CASE, CHECK_OK);
       ParseExpression(true, CHECK_OK);
-      Expect(i::Token::COLON, CHECK_OK);
-    } else if (token == i::Token::DEFAULT) {
-      Expect(i::Token::DEFAULT, CHECK_OK);
-      Expect(i::Token::COLON, CHECK_OK);
     } else {
-      ParseStatement(CHECK_OK);
-    }
+      Expect(i::Token::DEFAULT, CHECK_OK);
+    }
+    Expect(i::Token::COLON, CHECK_OK);
     token = peek();
+    while (token != i::Token::CASE &&
+           token != i::Token::DEFAULT &&
+           token != i::Token::RBRACE) {
+      ParseStatement(CHECK_OK);
+      token = peek();
+    }
   }
   Expect(i::Token::RBRACE, ok);
   return Statement::Default();
=======================================
--- /branches/bleeding_edge/test/cctest/test-parsing.cc Tue Jul 10 05:24:17 2012 +++ /branches/bleeding_edge/test/cctest/test-parsing.cc Wed Jul 11 00:47:29 2012
@@ -1147,6 +1147,7 @@
     { "with ({})", "" },
     { "switch (12) { case 12: ", "}" },
     { "switch (12) { default: ", "}" },
+    { "switch (12) { ", "case 12: }" },
     { "label2: ", "" },
     { NULL, NULL }
   };

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to