| Index: test/cctest/test-parsing.cc
|
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc
|
| index 2ee81cf6ce417303425a24b7eef832433d7f9179..7a624cb0bf38f99a55ade2350f72af62986ed960 100644
|
| --- a/test/cctest/test-parsing.cc
|
| +++ b/test/cctest/test-parsing.cc
|
| @@ -3965,8 +3965,6 @@ TEST(MethodDefinitionStrictFormalParamereters) {
|
| const char* params_data[] = {
|
| "x, x",
|
| "x, y, x",
|
| - "eval",
|
| - "arguments",
|
| "var",
|
| "const",
|
| NULL
|
| @@ -3978,6 +3976,57 @@ TEST(MethodDefinitionStrictFormalParamereters) {
|
| }
|
|
|
|
|
| +TEST(MethodDefinitionEvalArguments) {
|
| + const char* strict_context_data[][2] =
|
| + {{"'use strict'; ({method(", "){}});"},
|
| + {"'use strict'; ({*method(", "){}});"},
|
| + {NULL, NULL}};
|
| + const char* sloppy_context_data[][2] =
|
| + {{"({method(", "){}});"},
|
| + {"({*method(", "){}});"},
|
| + {NULL, NULL}};
|
| +
|
| + const char* data[] = {
|
| + "eval",
|
| + "arguments",
|
| + NULL};
|
| +
|
| + static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals};
|
| +
|
| + // Fail in strict mode
|
| + RunParserSyncTest(strict_context_data, data, kError, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +
|
| + // OK in sloppy mode
|
| + RunParserSyncTest(sloppy_context_data, data, kSuccess, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +}
|
| +
|
| +
|
| +TEST(MethodDefinitionDuplicateEvalArguments) {
|
| + const char* context_data[][2] =
|
| + {{"'use strict'; ({method(", "){}});"},
|
| + {"'use strict'; ({*method(", "){}});"},
|
| + {"({method(", "){}});"},
|
| + {"({*method(", "){}});"},
|
| + {NULL, NULL}};
|
| +
|
| + const char* data[] = {
|
| + "eval, eval",
|
| + "eval, a, eval",
|
| + "arguments, arguments",
|
| + "arguments, a, arguments",
|
| + NULL};
|
| +
|
| + static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals};
|
| +
|
| + // In strict mode, the error is using "eval" or "arguments" as parameter names
|
| + // In sloppy mode, the error is that eval / arguments are duplicated
|
| + RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +}
|
| +
|
| +
|
| TEST(MethodDefinitionDuplicateProperty) {
|
| const char* context_data[][2] = {{"'use strict'; ({", "});"},
|
| {NULL, NULL}};
|
| @@ -4880,6 +4929,59 @@ TEST(ParseRestParametersErrors) {
|
| }
|
|
|
|
|
| +TEST(RestParametersEvalArguments) {
|
| + const char* strict_context_data[][2] =
|
| + {{"'use strict';(function(",
|
| + "){ return;})(1, [], /regexp/, 'str',function(){});"},
|
| + {NULL, NULL}};
|
| + const char* sloppy_context_data[][2] =
|
| + {{"(function(",
|
| + "){ return;})(1, [],/regexp/, 'str', function(){});"},
|
| + {NULL, NULL}};
|
| +
|
| + const char* data[] = {
|
| + "...eval",
|
| + "eval, ...args",
|
| + "...arguments",
|
| + "arguments, ...args",
|
| + NULL};
|
| +
|
| + static const ParserFlag always_flags[] = {kAllowHarmonyRestParameters};
|
| +
|
| + // Fail in strict mode
|
| + RunParserSyncTest(strict_context_data, data, kError, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +
|
| + // OK in sloppy mode
|
| + RunParserSyncTest(sloppy_context_data, data, kSuccess, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +}
|
| +
|
| +
|
| +TEST(RestParametersDuplicateEvalArguments) {
|
| + const char* context_data[][2] =
|
| + {{"'use strict';(function(",
|
| + "){ return;})(1, [], /regexp/, 'str',function(){});"},
|
| + {"(function(",
|
| + "){ return;})(1, [],/regexp/, 'str', function(){});"},
|
| + {NULL, NULL}};
|
| +
|
| + const char* data[] = {
|
| + "eval, ...eval",
|
| + "eval, eval, ...args",
|
| + "arguments, ...arguments",
|
| + "arguments, arguments, ...args",
|
| + NULL};
|
| +
|
| + static const ParserFlag always_flags[] = {kAllowHarmonyRestParameters};
|
| +
|
| + // In strict mode, the error is using "eval" or "arguments" as parameter names
|
| + // In sloppy mode, the error is that eval / arguments are duplicated
|
| + RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +}
|
| +
|
| +
|
| TEST(LexicalScopingSloppyMode) {
|
| const char* context_data[][2] = {
|
| {"", ""},
|
| @@ -5317,3 +5419,37 @@ TEST(PropertyNameEvalArguments) {
|
| RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
|
| always_flags, arraysize(always_flags));
|
| }
|
| +
|
| +
|
| +TEST(FunctionLiteralDuplicateParameters) {
|
| + const char* strict_context_data[][2] =
|
| + {{"'use strict';(function(", "){})();"},
|
| + {"(function(", ") { 'use strict'; })();"},
|
| + {"'use strict'; function fn(", ") {}; fn();"},
|
| + {"function fn(", ") { 'use strict'; }; fn();"},
|
| + {"'use strong';(function(", "){})();"},
|
| + {"(function(", ") { 'use strong'; })();"},
|
| + {"'use strong'; function fn(", ") {}; fn();"},
|
| + {"function fn(", ") { 'use strong'; }; fn();"},
|
| + {NULL, NULL}};
|
| +
|
| + const char* sloppy_context_data[][2] =
|
| + {{"(function(", "){})();"},
|
| + {"(function(", ") {})();"},
|
| + {"function fn(", ") {}; fn();"},
|
| + {"function fn(", ") {}; fn();"},
|
| + {NULL, NULL}};
|
| +
|
| + const char* data[] = {
|
| + "a, a",
|
| + "a, a, a",
|
| + "b, a, a",
|
| + "a, b, c, c",
|
| + "a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, w",
|
| + NULL};
|
| +
|
| + static const ParserFlag always_flags[] = { kAllowStrongMode };
|
| + RunParserSyncTest(strict_context_data, data, kError, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| + RunParserSyncTest(sloppy_context_data, data, kSuccess, NULL, 0, NULL, 0);
|
| +}
|
|
|