Index: test/cctest/test-parsing.cc |
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
index 675b48797952dbaf3e0afd23b933c61651ea1998..1aa520183d21749f14f529077dbee86a9dbf5f71 100644 |
--- a/test/cctest/test-parsing.cc |
+++ b/test/cctest/test-parsing.cc |
@@ -6389,7 +6389,6 @@ TEST(DestructuringPositiveTests) { |
{"function f(", ") {}"}, |
{"function f(argument1, ", ") {}"}, |
{"var f = (", ") => {};"}, |
- {"var f = ", " => {};"}, |
{"var f = (argument1,", ") => {};"}, |
{NULL, NULL}}; |
@@ -6417,6 +6416,7 @@ TEST(DestructuringPositiveTests) { |
"{42 : x = 42}", |
"{42e-2 : x}", |
"{42e-2 : x = 42}", |
+ "{x : y, x : z}", |
"{'hi' : x}", |
"{'hi' : x = 42}", |
"{var: x}", |
@@ -6605,6 +6605,115 @@ TEST(DestructuringDisallowPatternsInForVarIn) { |
} |
+TEST(DestructuringDuplicateParams) { |
+ i::FLAG_harmony_destructuring = true; |
+ i::FLAG_harmony_arrow_functions = true; |
+ i::FLAG_harmony_computed_property_names = true; |
+ static const ParserFlag always_flags[] = { |
+ kAllowHarmonyObjectLiterals, kAllowHarmonyComputedPropertyNames, |
+ kAllowHarmonyArrowFunctions, kAllowHarmonyDestructuring}; |
+ const char* context_data[][2] = {{"'use strict';", ""}, |
+ {"function outer() { 'use strict';", "}"}, |
+ {nullptr, nullptr}}; |
+ |
+ |
+ // clang-format off |
+ const char* error_data[] = { |
+ "function f(x,x){}", |
+ "function f(x, {x : x}){}", |
+ "function f(x, {x}){}", |
+ "function f({x,x}) {}", |
+ "function f([x,x]) {}", |
+ "function f(x, [y,{z:x}]) {}", |
+ "function f([x,{y:x}]) {}", |
+ // non-simple parameter list causes duplicates to be errors in sloppy mode. |
+ "function f(x, x, {a}) {}", |
+ nullptr}; |
+ // clang-format on |
+ RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags, |
+ arraysize(always_flags)); |
+} |
+ |
+ |
+TEST(DestructuringDuplicateParamsSloppy) { |
+ i::FLAG_harmony_destructuring = true; |
+ i::FLAG_harmony_arrow_functions = true; |
+ i::FLAG_harmony_computed_property_names = true; |
+ static const ParserFlag always_flags[] = { |
+ kAllowHarmonyObjectLiterals, kAllowHarmonyComputedPropertyNames, |
+ kAllowHarmonyArrowFunctions, kAllowHarmonyDestructuring}; |
+ const char* context_data[][2] = { |
+ {"", ""}, {"function outer() {", "}"}, {nullptr, nullptr}}; |
+ |
+ |
+ // clang-format off |
+ const char* error_data[] = { |
+ // non-simple parameter list causes duplicates to be errors in sloppy mode. |
+ "function f(x, {x : x}){}", |
+ "function f(x, {x}){}", |
+ "function f({x,x}) {}", |
+ "function f(x, x, {a}) {}", |
+ nullptr}; |
+ // clang-format on |
+ RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags, |
+ arraysize(always_flags)); |
+} |
+ |
+ |
+TEST(DestructuringDisallowPatternsInSingleParamArrows) { |
+ i::FLAG_harmony_destructuring = true; |
+ i::FLAG_harmony_arrow_functions = true; |
+ i::FLAG_harmony_computed_property_names = true; |
+ static const ParserFlag always_flags[] = { |
+ kAllowHarmonyObjectLiterals, kAllowHarmonyComputedPropertyNames, |
+ kAllowHarmonyArrowFunctions, kAllowHarmonyDestructuring}; |
+ const char* context_data[][2] = {{"'use strict';", ""}, |
+ {"function outer() { 'use strict';", "}"}, |
+ {"", ""}, |
+ {"function outer() { ", "}"}, |
+ {nullptr, nullptr}}; |
+ |
+ // clang-format off |
+ const char* error_data[] = { |
+ "var f = {x} => {};", |
+ "var f = {x,y} => {};", |
+ nullptr}; |
+ // clang-format on |
+ RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags, |
+ arraysize(always_flags)); |
+} |
+ |
+ |
+TEST(DestructuringDisallowPatternsInRestParams) { |
+ i::FLAG_harmony_destructuring = true; |
+ i::FLAG_harmony_arrow_functions = true; |
+ i::FLAG_harmony_rest_parameters = true; |
+ i::FLAG_harmony_computed_property_names = true; |
+ static const ParserFlag always_flags[] = { |
+ kAllowHarmonyObjectLiterals, kAllowHarmonyComputedPropertyNames, |
+ kAllowHarmonyArrowFunctions, kAllowHarmonyRestParameters, |
+ kAllowHarmonyDestructuring}; |
+ const char* context_data[][2] = {{"'use strict';", ""}, |
+ {"function outer() { 'use strict';", "}"}, |
+ {"", ""}, |
+ {"function outer() { ", "}"}, |
+ {nullptr, nullptr}}; |
+ |
+ // clang-format off |
+ const char* error_data[] = { |
+ "function(...{}) {}", |
+ "function(...{x}) {}", |
+ "function(...[x]) {}", |
+ "(...{}) => {}", |
+ "(...{x}) => {}", |
+ "(...[x]) => {}", |
+ nullptr}; |
+ // clang-format on |
+ RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags, |
+ arraysize(always_flags)); |
+} |
+ |
+ |
TEST(SpreadArray) { |
i::FLAG_harmony_spread_arrays = true; |