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

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

Issue 885243002: Implement parsing of ES6 Rest Parameters (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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
« src/scanner.cc ('K') | « src/token.h ('k') | no next file » | 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 1338 matching lines...) Expand 10 before | Expand all | Expand 10 after
1349 1349
1350 enum ParserFlag { 1350 enum ParserFlag {
1351 kAllowLazy, 1351 kAllowLazy,
1352 kAllowNatives, 1352 kAllowNatives,
1353 kAllowHarmonyScoping, 1353 kAllowHarmonyScoping,
1354 kAllowHarmonyModules, 1354 kAllowHarmonyModules,
1355 kAllowHarmonyNumericLiterals, 1355 kAllowHarmonyNumericLiterals,
1356 kAllowHarmonyArrowFunctions, 1356 kAllowHarmonyArrowFunctions,
1357 kAllowHarmonyClasses, 1357 kAllowHarmonyClasses,
1358 kAllowHarmonyObjectLiterals, 1358 kAllowHarmonyObjectLiterals,
1359 kAllowHarmonyRestParameters,
1359 kAllowHarmonyTemplates, 1360 kAllowHarmonyTemplates,
1360 kAllowHarmonySloppy, 1361 kAllowHarmonySloppy,
1361 kAllowHarmonyUnicode, 1362 kAllowHarmonyUnicode,
1362 kAllowHarmonyComputedPropertyNames 1363 kAllowHarmonyComputedPropertyNames
1363 }; 1364 };
1364 1365
1365 1366
1366 enum ParserSyncTestResult { 1367 enum ParserSyncTestResult {
1367 kSuccessOrError, 1368 kSuccessOrError,
1368 kSuccess, 1369 kSuccess,
1369 kError 1370 kError
1370 }; 1371 };
1371 1372
1372 template <typename Traits> 1373 template <typename Traits>
1373 void SetParserFlags(i::ParserBase<Traits>* parser, 1374 void SetParserFlags(i::ParserBase<Traits>* parser,
1374 i::EnumSet<ParserFlag> flags) { 1375 i::EnumSet<ParserFlag> flags) {
1375 parser->set_allow_lazy(flags.Contains(kAllowLazy)); 1376 parser->set_allow_lazy(flags.Contains(kAllowLazy));
1376 parser->set_allow_natives(flags.Contains(kAllowNatives)); 1377 parser->set_allow_natives(flags.Contains(kAllowNatives));
1377 parser->set_allow_harmony_scoping(flags.Contains(kAllowHarmonyScoping)); 1378 parser->set_allow_harmony_scoping(flags.Contains(kAllowHarmonyScoping));
1378 parser->set_allow_harmony_modules(flags.Contains(kAllowHarmonyModules)); 1379 parser->set_allow_harmony_modules(flags.Contains(kAllowHarmonyModules));
1379 parser->set_allow_harmony_numeric_literals( 1380 parser->set_allow_harmony_numeric_literals(
1380 flags.Contains(kAllowHarmonyNumericLiterals)); 1381 flags.Contains(kAllowHarmonyNumericLiterals));
1381 parser->set_allow_harmony_object_literals( 1382 parser->set_allow_harmony_object_literals(
1382 flags.Contains(kAllowHarmonyObjectLiterals)); 1383 flags.Contains(kAllowHarmonyObjectLiterals));
1383 parser->set_allow_harmony_arrow_functions( 1384 parser->set_allow_harmony_arrow_functions(
1384 flags.Contains(kAllowHarmonyArrowFunctions)); 1385 flags.Contains(kAllowHarmonyArrowFunctions));
1385 parser->set_allow_harmony_classes(flags.Contains(kAllowHarmonyClasses)); 1386 parser->set_allow_harmony_classes(flags.Contains(kAllowHarmonyClasses));
1386 parser->set_allow_harmony_templates(flags.Contains(kAllowHarmonyTemplates)); 1387 parser->set_allow_harmony_templates(flags.Contains(kAllowHarmonyTemplates));
1388 parser->set_allow_harmony_rest_params(
1389 flags.Contains(kAllowHarmonyRestParameters));
1387 parser->set_allow_harmony_sloppy(flags.Contains(kAllowHarmonySloppy)); 1390 parser->set_allow_harmony_sloppy(flags.Contains(kAllowHarmonySloppy));
1388 parser->set_allow_harmony_unicode(flags.Contains(kAllowHarmonyUnicode)); 1391 parser->set_allow_harmony_unicode(flags.Contains(kAllowHarmonyUnicode));
1389 parser->set_allow_harmony_computed_property_names( 1392 parser->set_allow_harmony_computed_property_names(
1390 flags.Contains(kAllowHarmonyComputedPropertyNames)); 1393 flags.Contains(kAllowHarmonyComputedPropertyNames));
1391 } 1394 }
1392 1395
1393 1396
1394 void TestParserSyncWithFlags(i::Handle<i::String> source, 1397 void TestParserSyncWithFlags(i::Handle<i::String> source,
1395 i::EnumSet<ParserFlag> flags, 1398 i::EnumSet<ParserFlag> flags,
1396 ParserSyncTestResult result) { 1399 ParserSyncTestResult result) {
(...skipping 3164 matching lines...) Expand 10 before | Expand all | Expand 10 after
4561 "`hello${1}\\x\n`", 4564 "`hello${1}\\x\n`",
4562 "`hello${1}\\x\n${2}`", 4565 "`hello${1}\\x\n${2}`",
4563 NULL}; 4566 NULL};
4564 4567
4565 static const ParserFlag always_flags[] = {kAllowHarmonyTemplates}; 4568 static const ParserFlag always_flags[] = {kAllowHarmonyTemplates};
4566 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, 4569 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags,
4567 arraysize(always_flags)); 4570 arraysize(always_flags));
4568 } 4571 }
4569 4572
4570 4573
4574 TEST(ParseRestParameters) {
4575 const char* context_data[][2] = {{"'use strict';(function(",
4576 "){ return args;})(1, [], /regexp/, 'str',"
4577 "function(){});"},
4578 {"(function(", "){ return args;})(1, [],"
4579 "/regexp/, 'str', function(){});"},
4580 {NULL, NULL}};
4581
4582 const char* data[] = {
4583 "...args",
4584 "a, ...args",
4585 "... args",
4586 "a, ... args",
4587 "...\targs",
4588 "a, ...\targs",
4589 "...\r\nargs",
4590 "a, ...\r\nargs",
4591 "...\rargs",
4592 "a, ...\rargs",
4593 "...\t\n\t\t\n args",
4594 "a, ... \n \n args",
4595 NULL};
4596 static const ParserFlag always_flags[] = {kAllowHarmonyRestParameters};
4597 RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags,
4598 arraysize(always_flags));
4599 }
4600
4601
4602 TEST(ParseRestParametersErrors) {
4603 const char* context_data[][2] = {{"'use strict';(function(",
4604 "){ return args;}(1, [], /regexp/, 'str',"
4605 "function(){});"},
4606 {"(function(", "){ return args;}(1, [],"
4607 "/regexp/, 'str', function(){});"},
4608 {NULL, NULL}};
4609
4610 const char* data[] = {
4611 "...args, b",
4612 "a, ...args, b",
4613 "...args, b",
4614 "a, ...args, b",
4615 "...args,\tb",
4616 "a,...args\t,b",
4617 "...args\r\n, b",
4618 "a, ... args,\r\nb",
4619 "...args\r,b",
4620 "a, ... args,\rb",
4621 "...args\t\n\t\t\n, b",
4622 "a, ... args, \n \n b",
4623 "a, a, ...args",
4624 "a,\ta, ...args",
4625 "a,\ra, ...args",
4626 "a,\na, ...args",
4627 NULL};
4628 static const ParserFlag always_flags[] = {kAllowHarmonyRestParameters};
4629 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags,
4630 arraysize(always_flags));
4631 }
4632
4633
4571 TEST(LexicalScopingSloppyMode) { 4634 TEST(LexicalScopingSloppyMode) {
4572 const char* context_data[][2] = { 4635 const char* context_data[][2] = {
4573 {"", ""}, 4636 {"", ""},
4574 {"function f() {", "}"}, 4637 {"function f() {", "}"},
4575 {"{", "}"}, 4638 {"{", "}"},
4576 {NULL, NULL}}; 4639 {NULL, NULL}};
4577 const char* bad_data[] = { 4640 const char* bad_data[] = {
4578 "let x = 1;", 4641 "let x = 1;",
4579 "for(let x = 1;;){}", 4642 "for(let x = 1;;){}",
4580 "for(let x of []){}", 4643 "for(let x of []){}",
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
4913 "const x = 1;", 4976 "const x = 1;",
4914 "class C {}", 4977 "class C {}",
4915 NULL}; 4978 NULL};
4916 4979
4917 static const ParserFlag always_flags[] = { 4980 static const ParserFlag always_flags[] = {
4918 kAllowHarmonyClasses, kAllowHarmonyScoping 4981 kAllowHarmonyClasses, kAllowHarmonyScoping
4919 }; 4982 };
4920 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, 4983 RunParserSyncTest(context_data, statement_data, kError, NULL, 0,
4921 always_flags, arraysize(always_flags)); 4984 always_flags, arraysize(always_flags));
4922 } 4985 }
OLDNEW
« src/scanner.cc ('K') | « src/token.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698