Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(645)

Side by Side Diff: test/cctest/test-parsing.cc

Issue 573963003: Enable ES6 generators (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/preparser.cc ('k') | test/mjsunit/debug-script.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 data.Dispose(); 1207 data.Dispose();
1208 return i::Handle<i::String>::cast(result); 1208 return i::Handle<i::String>::cast(result);
1209 } 1209 }
1210 1210
1211 1211
1212 enum ParserFlag { 1212 enum ParserFlag {
1213 kAllowLazy, 1213 kAllowLazy,
1214 kAllowNativesSyntax, 1214 kAllowNativesSyntax,
1215 kAllowHarmonyScoping, 1215 kAllowHarmonyScoping,
1216 kAllowModules, 1216 kAllowModules,
1217 kAllowGenerators,
1218 kAllowHarmonyNumericLiterals, 1217 kAllowHarmonyNumericLiterals,
1219 kAllowArrowFunctions, 1218 kAllowArrowFunctions,
1220 kAllowClasses, 1219 kAllowClasses,
1221 kAllowHarmonyObjectLiterals 1220 kAllowHarmonyObjectLiterals
1222 }; 1221 };
1223 1222
1224 1223
1225 enum ParserSyncTestResult { 1224 enum ParserSyncTestResult {
1226 kSuccessOrError, 1225 kSuccessOrError,
1227 kSuccess, 1226 kSuccess,
1228 kError 1227 kError
1229 }; 1228 };
1230 1229
1231 template <typename Traits> 1230 template <typename Traits>
1232 void SetParserFlags(i::ParserBase<Traits>* parser, 1231 void SetParserFlags(i::ParserBase<Traits>* parser,
1233 i::EnumSet<ParserFlag> flags) { 1232 i::EnumSet<ParserFlag> flags) {
1234 parser->set_allow_lazy(flags.Contains(kAllowLazy)); 1233 parser->set_allow_lazy(flags.Contains(kAllowLazy));
1235 parser->set_allow_natives_syntax(flags.Contains(kAllowNativesSyntax)); 1234 parser->set_allow_natives_syntax(flags.Contains(kAllowNativesSyntax));
1236 parser->set_allow_harmony_scoping(flags.Contains(kAllowHarmonyScoping)); 1235 parser->set_allow_harmony_scoping(flags.Contains(kAllowHarmonyScoping));
1237 parser->set_allow_modules(flags.Contains(kAllowModules)); 1236 parser->set_allow_modules(flags.Contains(kAllowModules));
1238 parser->set_allow_generators(flags.Contains(kAllowGenerators));
1239 parser->set_allow_harmony_numeric_literals( 1237 parser->set_allow_harmony_numeric_literals(
1240 flags.Contains(kAllowHarmonyNumericLiterals)); 1238 flags.Contains(kAllowHarmonyNumericLiterals));
1241 parser->set_allow_harmony_object_literals( 1239 parser->set_allow_harmony_object_literals(
1242 flags.Contains(kAllowHarmonyObjectLiterals)); 1240 flags.Contains(kAllowHarmonyObjectLiterals));
1243 parser->set_allow_arrow_functions(flags.Contains(kAllowArrowFunctions)); 1241 parser->set_allow_arrow_functions(flags.Contains(kAllowArrowFunctions));
1244 parser->set_allow_classes(flags.Contains(kAllowClasses)); 1242 parser->set_allow_classes(flags.Contains(kAllowClasses));
1245 } 1243 }
1246 1244
1247 1245
1248 void TestParserSyncWithFlags(i::Handle<i::String> source, 1246 void TestParserSyncWithFlags(i::Handle<i::String> source,
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
1443 }; 1441 };
1444 1442
1445 v8::HandleScope handles(CcTest::isolate()); 1443 v8::HandleScope handles(CcTest::isolate());
1446 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 1444 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate());
1447 v8::Context::Scope context_scope(context); 1445 v8::Context::Scope context_scope(context);
1448 1446
1449 CcTest::i_isolate()->stack_guard()->SetStackLimit( 1447 CcTest::i_isolate()->stack_guard()->SetStackLimit(
1450 i::GetCurrentStackPosition() - 128 * 1024); 1448 i::GetCurrentStackPosition() - 128 * 1024);
1451 1449
1452 static const ParserFlag flags1[] = { 1450 static const ParserFlag flags1[] = {
1453 kAllowLazy, kAllowHarmonyScoping, 1451 kAllowLazy, kAllowHarmonyScoping,
1454 kAllowModules, kAllowGenerators, 1452 kAllowModules, kAllowArrowFunctions,
1455 kAllowArrowFunctions, kAllowHarmonyNumericLiterals, 1453 kAllowHarmonyNumericLiterals, kAllowHarmonyObjectLiterals};
1456 kAllowHarmonyObjectLiterals};
1457 for (int i = 0; context_data[i][0] != NULL; ++i) { 1454 for (int i = 0; context_data[i][0] != NULL; ++i) {
1458 for (int j = 0; statement_data[j] != NULL; ++j) { 1455 for (int j = 0; statement_data[j] != NULL; ++j) {
1459 for (int k = 0; termination_data[k] != NULL; ++k) { 1456 for (int k = 0; termination_data[k] != NULL; ++k) {
1460 int kPrefixLen = i::StrLength(context_data[i][0]); 1457 int kPrefixLen = i::StrLength(context_data[i][0]);
1461 int kStatementLen = i::StrLength(statement_data[j]); 1458 int kStatementLen = i::StrLength(statement_data[j]);
1462 int kTerminationLen = i::StrLength(termination_data[k]); 1459 int kTerminationLen = i::StrLength(termination_data[k]);
1463 int kSuffixLen = i::StrLength(context_data[i][1]); 1460 int kSuffixLen = i::StrLength(context_data[i][1]);
1464 int kProgramSize = kPrefixLen + kStatementLen + kTerminationLen 1461 int kProgramSize = kPrefixLen + kStatementLen + kTerminationLen
1465 + kSuffixLen + i::StrLength("label: for (;;) { }"); 1462 + kSuffixLen + i::StrLength("label: for (;;) { }");
1466 1463
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 const ParserFlag* always_true_flags = NULL, 1518 const ParserFlag* always_true_flags = NULL,
1522 int always_true_flags_len = 0) { 1519 int always_true_flags_len = 0) {
1523 v8::HandleScope handles(CcTest::isolate()); 1520 v8::HandleScope handles(CcTest::isolate());
1524 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 1521 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate());
1525 v8::Context::Scope context_scope(context); 1522 v8::Context::Scope context_scope(context);
1526 1523
1527 CcTest::i_isolate()->stack_guard()->SetStackLimit( 1524 CcTest::i_isolate()->stack_guard()->SetStackLimit(
1528 i::GetCurrentStackPosition() - 128 * 1024); 1525 i::GetCurrentStackPosition() - 128 * 1024);
1529 1526
1530 static const ParserFlag default_flags[] = { 1527 static const ParserFlag default_flags[] = {
1531 kAllowArrowFunctions, kAllowClasses, 1528 kAllowArrowFunctions, kAllowClasses,
1532 kAllowGenerators, kAllowHarmonyNumericLiterals, 1529 kAllowHarmonyNumericLiterals, kAllowHarmonyObjectLiterals,
1533 kAllowHarmonyObjectLiterals, kAllowHarmonyScoping, 1530 kAllowHarmonyScoping, kAllowLazy,
1534 kAllowLazy, kAllowModules, 1531 kAllowModules, kAllowNativesSyntax,
1535 kAllowNativesSyntax,
1536 }; 1532 };
1537 ParserFlag* generated_flags = NULL; 1533 ParserFlag* generated_flags = NULL;
1538 if (flags == NULL) { 1534 if (flags == NULL) {
1539 flags = default_flags; 1535 flags = default_flags;
1540 flags_len = arraysize(default_flags); 1536 flags_len = arraysize(default_flags);
1541 if (always_true_flags != NULL) { 1537 if (always_true_flags != NULL) {
1542 // Remove always_true_flags from default_flags. 1538 // Remove always_true_flags from default_flags.
1543 CHECK(always_true_flags_len < flags_len); 1539 CHECK(always_true_flags_len < flags_len);
1544 generated_flags = new ParserFlag[flags_len - always_true_flags_len]; 1540 generated_flags = new ParserFlag[flags_len - always_true_flags_len];
1545 int flag_index = 0; 1541 int flag_index = 0;
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
1887 "yield++;", 1883 "yield++;",
1888 "yield: 34", 1884 "yield: 34",
1889 "function yield(yield) { yield: yield (yield + yield(0)); }", 1885 "function yield(yield) { yield: yield (yield + yield(0)); }",
1890 "({ yield: 1 })", 1886 "({ yield: 1 })",
1891 "({ get yield() { 1 } })", 1887 "({ get yield() { 1 } })",
1892 "yield(100)", 1888 "yield(100)",
1893 "yield[100]", 1889 "yield[100]",
1894 NULL 1890 NULL
1895 }; 1891 };
1896 1892
1897 // This test requires kAllowGenerators to succeed. 1893 RunParserSyncTest(context_data, statement_data, kSuccess);
1898 static const ParserFlag always_true_flags[] = { kAllowGenerators };
1899 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
1900 always_true_flags, 1);
1901 } 1894 }
1902 1895
1903 1896
1904 TEST(ErrorsYieldStrict) { 1897 TEST(ErrorsYieldStrict) {
1905 const char* context_data[][2] = { 1898 const char* context_data[][2] = {
1906 { "\"use strict\";", "" }, 1899 { "\"use strict\";", "" },
1907 { "\"use strict\"; function not_gen() {", "}" }, 1900 { "\"use strict\"; function not_gen() {", "}" },
1908 { "function test_func() {\"use strict\"; ", "}"}, 1901 { "function test_func() {\"use strict\"; ", "}"},
1909 { "\"use strict\"; function * gen() { function not_gen() {", "} }" }, 1902 { "\"use strict\"; function * gen() { function not_gen() {", "} }" },
1910 { "\"use strict\"; (function not_gen() {", "})" }, 1903 { "\"use strict\"; (function not_gen() {", "})" },
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1983 "{yield}", 1976 "{yield}",
1984 "yield, yield", 1977 "yield, yield",
1985 "yield; yield", 1978 "yield; yield",
1986 "(yield) ? yield : yield", 1979 "(yield) ? yield : yield",
1987 "(yield) \n ? yield : yield", 1980 "(yield) \n ? yield : yield",
1988 // If there is a newline before the next token, we don't look for RHS. 1981 // If there is a newline before the next token, we don't look for RHS.
1989 "yield\nfor (;;) {}", 1982 "yield\nfor (;;) {}",
1990 NULL 1983 NULL
1991 }; 1984 };
1992 1985
1993 // This test requires kAllowGenerators to succeed. 1986 RunParserSyncTest(context_data, statement_data, kSuccess);
1994 static const ParserFlag always_true_flags[] = {
1995 kAllowGenerators
1996 };
1997 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
1998 always_true_flags, 1);
1999 } 1987 }
2000 1988
2001 1989
2002 TEST(ErrorsYieldGenerator) { 1990 TEST(ErrorsYieldGenerator) {
2003 const char* context_data[][2] = { 1991 const char* context_data[][2] = {
2004 { "function * gen() {", "}" }, 1992 { "function * gen() {", "}" },
2005 { "\"use strict\"; function * gen() {", "}" }, 1993 { "\"use strict\"; function * gen() {", "}" },
2006 { NULL, NULL } 1994 { NULL, NULL }
2007 }; 1995 };
2008 1996
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
2099 }; 2087 };
2100 2088
2101 const char* statement_data[] = { 2089 const char* statement_data[] = {
2102 "eval() { }", 2090 "eval() { }",
2103 "arguments() { }", 2091 "arguments() { }",
2104 "interface() { }", 2092 "interface() { }",
2105 "yield() { }", 2093 "yield() { }",
2106 NULL 2094 NULL
2107 }; 2095 };
2108 2096
2109 // This test requires kAllowGenerators to succeed. 2097 RunParserSyncTest(context_data, statement_data, kSuccess);
2110 static const ParserFlag always_true_flags[] = {
2111 kAllowGenerators
2112 };
2113 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
2114 always_true_flags, 1);
2115 } 2098 }
2116 2099
2117 2100
2118 TEST(ErrorsIllegalWordsAsLabelsSloppy) { 2101 TEST(ErrorsIllegalWordsAsLabelsSloppy) {
2119 // Using future reserved words as labels is always an error. 2102 // Using future reserved words as labels is always an error.
2120 const char* context_data[][2] = { 2103 const char* context_data[][2] = {
2121 { "", ""}, 2104 { "", ""},
2122 { "function test_func() {", "}" }, 2105 { "function test_func() {", "}" },
2123 { "() => {", "}" }, 2106 { "() => {", "}" },
2124 { NULL, NULL } 2107 { NULL, NULL }
(...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after
3303 "(a = b) => {}", 3286 "(a = b) => {}",
3304 "(a = b, c) => {}", 3287 "(a = b, c) => {}",
3305 "(a, b = c) => {}", 3288 "(a, b = c) => {}",
3306 "(foo ? bar : baz) => {}", 3289 "(foo ? bar : baz) => {}",
3307 "(a, foo ? bar : baz) => {}", 3290 "(a, foo ? bar : baz) => {}",
3308 "(foo ? bar : baz, a) => {}", 3291 "(foo ? bar : baz, a) => {}",
3309 NULL 3292 NULL
3310 }; 3293 };
3311 3294
3312 // The test is quite slow, so run it with a reduced set of flags. 3295 // The test is quite slow, so run it with a reduced set of flags.
3313 static const ParserFlag flags[] = { 3296 static const ParserFlag flags[] = {kAllowLazy, kAllowHarmonyScoping};
3314 kAllowLazy, kAllowHarmonyScoping, kAllowGenerators
3315 };
3316 static const ParserFlag always_flags[] = { kAllowArrowFunctions }; 3297 static const ParserFlag always_flags[] = { kAllowArrowFunctions };
3317 RunParserSyncTest(context_data, statement_data, kError, flags, 3298 RunParserSyncTest(context_data, statement_data, kError, flags,
3318 arraysize(flags), always_flags, arraysize(always_flags)); 3299 arraysize(flags), always_flags, arraysize(always_flags));
3319 } 3300 }
3320 3301
3321 3302
3322 TEST(NoErrorsArrowFunctions) { 3303 TEST(NoErrorsArrowFunctions) {
3323 // Tests that parser and preparser accept valid arrow functions syntax. 3304 // Tests that parser and preparser accept valid arrow functions syntax.
3324 const char* context_data[][2] = { 3305 const char* context_data[][2] = {
3325 {"", ";"}, 3306 {"", ";"},
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
3549 "x() {}, 'x'() {}", 3530 "x() {}, 'x'() {}",
3550 "0() {}, '0'() {}", 3531 "0() {}, '0'() {}",
3551 "1.0() {}, 1: 1", 3532 "1.0() {}, 1: 1",
3552 NULL 3533 NULL
3553 }; 3534 };
3554 3535
3555 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals}; 3536 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals};
3556 RunParserSyncTest(context_data, params_data, kError, NULL, 0, 3537 RunParserSyncTest(context_data, params_data, kError, NULL, 0,
3557 always_flags, arraysize(always_flags)); 3538 always_flags, arraysize(always_flags));
3558 } 3539 }
OLDNEW
« no previous file with comments | « src/preparser.cc ('k') | test/mjsunit/debug-script.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698