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