OLD | NEW |
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 6362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6373 strcmp( | 6373 strcmp( |
6374 "ReferenceError: In strong mode, using an undeclared global " | 6374 "ReferenceError: In strong mode, using an undeclared global " |
6375 "variable 'not_there3' is not allowed", | 6375 "variable 'not_there3' is not allowed", |
6376 *exception)); | 6376 *exception)); |
6377 } | 6377 } |
6378 } | 6378 } |
6379 | 6379 |
6380 | 6380 |
6381 TEST(DestructuringPositiveTests) { | 6381 TEST(DestructuringPositiveTests) { |
6382 i::FLAG_harmony_destructuring = true; | 6382 i::FLAG_harmony_destructuring = true; |
| 6383 i::FLAG_harmony_arrow_functions = true; |
6383 i::FLAG_harmony_computed_property_names = true; | 6384 i::FLAG_harmony_computed_property_names = true; |
6384 | 6385 |
6385 const char* context_data[][2] = {{"'use strict'; let ", " = {};"}, | 6386 const char* context_data[][2] = {{"'use strict'; let ", " = {};"}, |
6386 {"var ", " = {};"}, | 6387 {"var ", " = {};"}, |
6387 {"'use strict'; const ", " = {};"}, | 6388 {"'use strict'; const ", " = {};"}, |
| 6389 {"function f(", ") {}"}, |
| 6390 {"function f(argument1, ", ") {}"}, |
| 6391 {"var f = (", ") => {};"}, |
| 6392 {"var f = ", " => {};"}, |
| 6393 {"var f = (argument1,", ") => {};"}, |
6388 {NULL, NULL}}; | 6394 {NULL, NULL}}; |
6389 | 6395 |
6390 // clang-format off | 6396 // clang-format off |
6391 const char* data[] = { | 6397 const char* data[] = { |
6392 "a", | 6398 "a", |
6393 "{ x : y }", | 6399 "{ x : y }", |
6394 "{ x : y = 1 }", | 6400 "{ x : y = 1 }", |
6395 "[a]", | 6401 "[a]", |
6396 "[a = 1]", | 6402 "[a = 1]", |
6397 "[a,b,c]", | 6403 "[a,b,c]", |
(...skipping 19 matching lines...) Expand all Loading... |
6417 "{var: x = 42}", | 6423 "{var: x = 42}", |
6418 "{[x] : z}", | 6424 "{[x] : z}", |
6419 "{[1+1] : z}", | 6425 "{[1+1] : z}", |
6420 "{[foo()] : z}", | 6426 "{[foo()] : z}", |
6421 "{}", | 6427 "{}", |
6422 "[...rest]", | 6428 "[...rest]", |
6423 "[a,b,...rest]", | 6429 "[a,b,...rest]", |
6424 "[a,,...rest]", | 6430 "[a,,...rest]", |
6425 NULL}; | 6431 NULL}; |
6426 // clang-format on | 6432 // clang-format on |
6427 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals, | 6433 static const ParserFlag always_flags[] = { |
6428 kAllowHarmonyComputedPropertyNames, | 6434 kAllowHarmonyObjectLiterals, kAllowHarmonyComputedPropertyNames, |
6429 kAllowHarmonyDestructuring}; | 6435 kAllowHarmonyArrowFunctions, kAllowHarmonyDestructuring}; |
6430 RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags, | 6436 RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags, |
6431 arraysize(always_flags)); | 6437 arraysize(always_flags)); |
6432 } | 6438 } |
6433 | 6439 |
6434 | 6440 |
6435 TEST(DestructuringNegativeTests) { | 6441 TEST(DestructuringNegativeTests) { |
6436 i::FLAG_harmony_destructuring = true; | 6442 i::FLAG_harmony_destructuring = true; |
| 6443 i::FLAG_harmony_arrow_functions = true; |
6437 i::FLAG_harmony_computed_property_names = true; | 6444 i::FLAG_harmony_computed_property_names = true; |
6438 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals, | 6445 static const ParserFlag always_flags[] = { |
6439 kAllowHarmonyComputedPropertyNames, | 6446 kAllowHarmonyObjectLiterals, kAllowHarmonyComputedPropertyNames, |
6440 kAllowHarmonyDestructuring}; | 6447 kAllowHarmonyArrowFunctions, kAllowHarmonyDestructuring}; |
6441 | 6448 |
6442 { // All modes. | 6449 { // All modes. |
6443 const char* context_data[][2] = {{"'use strict'; let ", " = {};"}, | 6450 const char* context_data[][2] = {{"'use strict'; let ", " = {};"}, |
6444 {"var ", " = {};"}, | 6451 {"var ", " = {};"}, |
6445 {"'use strict'; const ", " = {};"}, | 6452 {"'use strict'; const ", " = {};"}, |
| 6453 {"function f(", ") {}"}, |
| 6454 {"function f(argument1, ", ") {}"}, |
| 6455 {"var f = (", ") => {};"}, |
| 6456 {"var f = ", " => {};"}, |
| 6457 {"var f = (argument1,", ") => {};"}, |
6446 {NULL, NULL}}; | 6458 {NULL, NULL}}; |
6447 | 6459 |
6448 // clang-format off | 6460 // clang-format off |
6449 const char* data[] = { | 6461 const char* data[] = { |
6450 "a++", | 6462 "a++", |
6451 "++a", | 6463 "++a", |
6452 "delete a", | 6464 "delete a", |
6453 "void a", | 6465 "void a", |
6454 "typeof a", | 6466 "typeof a", |
6455 "--a", | 6467 "--a", |
(...skipping 12 matching lines...) Expand all Loading... |
6468 "a * a", | 6480 "a * a", |
6469 "a / a", | 6481 "a / a", |
6470 "a == a", | 6482 "a == a", |
6471 "a != a", | 6483 "a != a", |
6472 "a > a", | 6484 "a > a", |
6473 "a < a", | 6485 "a < a", |
6474 "a <<< a", | 6486 "a <<< a", |
6475 "a >>> a", | 6487 "a >>> a", |
6476 "function a() {}", | 6488 "function a() {}", |
6477 "a`bcd`", | 6489 "a`bcd`", |
6478 "x => x", | |
6479 "this", | 6490 "this", |
6480 "null", | 6491 "null", |
6481 "true", | 6492 "true", |
6482 "false", | 6493 "false", |
6483 "1", | 6494 "1", |
6484 "'abc'", | 6495 "'abc'", |
6485 "class {}", | 6496 "class {}", |
6486 "() => x", | |
6487 "{+2 : x}", | 6497 "{+2 : x}", |
6488 "{-2 : x}", | 6498 "{-2 : x}", |
6489 "var", | 6499 "var", |
6490 "[var]", | 6500 "[var]", |
6491 "{x : {y : var}}", | 6501 "{x : {y : var}}", |
6492 "{x : x = a+}", | 6502 "{x : x = a+}", |
6493 "{x : x = (a+)}", | 6503 "{x : x = (a+)}", |
6494 "{x : x += a}", | 6504 "{x : x += a}", |
6495 "{m() {} = 0}", | 6505 "{m() {} = 0}", |
6496 "{[1+1]}", | 6506 "{[1+1]}", |
6497 "[...rest, x]", | 6507 "[...rest, x]", |
6498 "[a,b,...rest, x]", | 6508 "[a,b,...rest, x]", |
6499 "[a,,...rest, x]", | 6509 "[a,,...rest, x]", |
6500 "[...rest,]", | 6510 "[...rest,]", |
6501 "[a,b,...rest,]", | 6511 "[a,b,...rest,]", |
6502 "[a,,...rest,]", | 6512 "[a,,...rest,]", |
6503 "[...rest,...rest1]", | 6513 "[...rest,...rest1]", |
6504 "[a,b,...rest,...rest1]", | 6514 "[a,b,...rest,...rest1]", |
6505 "[a,,..rest,...rest1]", | 6515 "[a,,..rest,...rest1]", |
6506 NULL}; | 6516 NULL}; |
6507 // clang-format on | 6517 // clang-format on |
6508 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | 6518 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
6509 arraysize(always_flags)); | 6519 arraysize(always_flags)); |
6510 } | 6520 } |
6511 | 6521 |
| 6522 { // All modes. |
| 6523 const char* context_data[][2] = {{"'use strict'; let ", " = {};"}, |
| 6524 {"var ", " = {};"}, |
| 6525 {"'use strict'; const ", " = {};"}, |
| 6526 {"function f(", ") {}"}, |
| 6527 {"function f(argument1, ", ") {}"}, |
| 6528 {"var f = (", ") => {};"}, |
| 6529 {"var f = (argument1,", ") => {};"}, |
| 6530 {NULL, NULL}}; |
| 6531 |
| 6532 // clang-format off |
| 6533 const char* data[] = { |
| 6534 "x => x", |
| 6535 "() => x", |
| 6536 NULL}; |
| 6537 // clang-format on |
| 6538 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
| 6539 arraysize(always_flags)); |
| 6540 } |
| 6541 |
6512 { // Strict mode. | 6542 { // Strict mode. |
6513 const char* context_data[][2] = {{"'use strict'; let ", " = {};"}, | 6543 const char* context_data[][2] = { |
6514 {"'use strict'; const ", " = {};"}, | 6544 {"'use strict'; let ", " = {};"}, |
6515 {NULL, NULL}}; | 6545 {"'use strict'; const ", " = {};"}, |
| 6546 {"'use strict'; function f(", ") {}"}, |
| 6547 {"'use strict'; function f(argument1, ", ") {}"}, |
| 6548 {NULL, NULL}}; |
6516 | 6549 |
6517 // clang-format off | 6550 // clang-format off |
6518 const char* data[] = { | 6551 const char* data[] = { |
6519 "[eval]", | 6552 "[eval]", |
6520 "{ a : arguments }", | 6553 "{ a : arguments }", |
6521 "[public]", | 6554 "[public]", |
6522 "{ x : private }", | 6555 "{ x : private }", |
6523 NULL}; | 6556 NULL}; |
6524 // clang-format on | 6557 // clang-format on |
6525 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | 6558 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6665 kAllowHarmonyObjectLiterals, | 6698 kAllowHarmonyObjectLiterals, |
6666 kAllowHarmonySloppy, | 6699 kAllowHarmonySloppy, |
6667 }; | 6700 }; |
6668 // clang-format on | 6701 // clang-format on |
6669 | 6702 |
6670 RunParserSyncTest(good_context_data, data, kSuccess, NULL, 0, always_flags, | 6703 RunParserSyncTest(good_context_data, data, kSuccess, NULL, 0, always_flags, |
6671 arraysize(always_flags)); | 6704 arraysize(always_flags)); |
6672 RunParserSyncTest(bad_context_data, data, kError, NULL, 0, always_flags, | 6705 RunParserSyncTest(bad_context_data, data, kError, NULL, 0, always_flags, |
6673 arraysize(always_flags)); | 6706 arraysize(always_flags)); |
6674 } | 6707 } |
OLD | NEW |