Chromium Code Reviews| Index: test/cctest/test-parsing.cc |
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
| index 23a3d2621a8fa78b1ce38d8a8dbbd04f58f6251d..23a4712a953c8aed44a438319189e67515186f58 100644 |
| --- a/test/cctest/test-parsing.cc |
| +++ b/test/cctest/test-parsing.cc |
| @@ -6879,3 +6879,89 @@ TEST(LetSloppy) { |
| RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags, |
| arraysize(always_flags)); |
| } |
| + |
| + |
| +TEST(LanguageModeDirectivesNonSimpleParameterListErrors) { |
| + // A block declaration scope as a child scope of a function scope |
|
rossberg
2015/08/24 13:11:08
Same here.
conradw
2015/08/25 11:31:20
Done.
|
| + // indicates that a function has a non-simple parameter list. |
| + // TC39 deemed "use strict" directives to be an error in this case, |
| + // on 29/7/2015. https://goo.gl/ueA7Ln |
| + // |
| + // In V8, this also applies to "use strong " directives. |
| + const char* context_data[][2] = { |
| + {"function f(", ") { 'use strict'; }"}, |
| + {"function f(", ") { 'use strong'; }"}, |
| + {"function* g(", ") { 'use strict'; }"}, |
| + {"function* g(", ") { 'use strong'; }"}, |
| + {"class c { foo(", ") { 'use strict' }"}, |
| + {"class c { foo(", ") { 'use strong' }"}, |
| + {"var a = (", ") => { 'use strict'; }"}, |
| + {"var a = (", ") => { 'use strong'; }"}, |
| + {"var o = { m(", ") { 'use strict'; }"}, |
| + {"var o = { m(", ") { 'use strong'; }"}, |
| + {"var o = { *gm(", ") { 'use strict'; }"}, |
| + {"var o = { *gm(", ") { 'use strong'; }"}, |
| + {"var c = { m(", ") { 'use strict'; }"}, |
| + {"var c = { m(", ") { 'use strong'; }"}, |
| + {"var c = { *gm(", ") { 'use strict'; }"}, |
| + {"var c = { *gm(", ") { 'use strong'; }"}, |
| + |
| + {"'use strict'; function f(", ") { 'use strict'; }"}, |
| + {"'use strict'; function f(", ") { 'use strong'; }"}, |
| + {"'use strict'; function* g(", ") { 'use strict'; }"}, |
| + {"'use strict'; function* g(", ") { 'use strong'; }"}, |
| + {"'use strict'; class c { foo(", ") { 'use strict' }"}, |
| + {"'use strict'; class c { foo(", ") { 'use strong' }"}, |
| + {"'use strict'; var a = (", ") => { 'use strict'; }"}, |
| + {"'use strict'; var a = (", ") => { 'use strong'; }"}, |
| + {"'use strict'; var o = { m(", ") { 'use strict'; }"}, |
| + {"'use strict'; var o = { m(", ") { 'use strong'; }"}, |
| + {"'use strict'; var o = { *gm(", ") { 'use strict'; }"}, |
| + {"'use strict'; var o = { *gm(", ") { 'use strong'; }"}, |
| + {"'use strict'; var c = { m(", ") { 'use strict'; }"}, |
| + {"'use strict'; var c = { m(", ") { 'use strong'; }"}, |
| + {"'use strict'; var c = { *gm(", ") { 'use strict'; }"}, |
| + {"'use strict'; var c = { *gm(", ") { 'use strong'; }"}, |
| + |
| + {"'use strong'; function f(", ") { 'use strict'; }"}, |
| + {"'use strong'; function f(", ") { 'use strong'; }"}, |
| + {"'use strong'; function* g(", ") { 'use strict'; }"}, |
| + {"'use strong'; function* g(", ") { 'use strong'; }"}, |
| + {"'use strong'; class c { foo(", ") { 'use strict' }"}, |
| + {"'use strong'; class c { foo(", ") { 'use strong' }"}, |
| + {"'use strong'; var a = (", ") => { 'use strict'; }"}, |
| + {"'use strong'; var a = (", ") => { 'use strong'; }"}, |
| + {"'use strong'; var o = { m(", ") { 'use strict'; }"}, |
| + {"'use strong'; var o = { m(", ") { 'use strong'; }"}, |
| + {"'use strong'; var o = { *gm(", ") { 'use strict'; }"}, |
| + {"'use strong'; var o = { *gm(", ") { 'use strong'; }"}, |
| + {"'use strong'; var c = { m(", ") { 'use strict'; }"}, |
| + {"'use strong'; var c = { m(", ") { 'use strong'; }"}, |
| + {"'use strong'; var c = { *gm(", ") { 'use strict'; }"}, |
| + {"'use strong'; var c = { *gm(", ") { 'use strong'; }"}, |
| + |
| + {NULL, NULL}}; |
| + |
| + const char* data[] = { |
| + // TODO(@caitp): support formal parameter initializers |
| + "{}", |
| + "[]", |
| + "[{}]", |
| + "{a}", |
| + "a, {b}", |
| + "a, b, {c, d, e}", |
| + "initializer = true", |
| + "a, b, c = 1", |
| + "...args", |
| + "a, b, ...rest", |
| + "[a, b, ...rest]", |
| + "{ bindingPattern = {} }", |
| + "{ initializedBindingPattern } = { initializedBindingPattern: true }", |
| + NULL}; |
| + |
| + static const ParserFlag always_flags[] = { |
| + kAllowHarmonyArrowFunctions, kAllowHarmonyDestructuring, |
| + kAllowHarmonyRestParameters, kAllowHarmonySloppy, kAllowStrongMode}; |
| + RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
| + arraysize(always_flags)); |
| +} |