Index: test/cctest/test-parsing.cc |
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
index 2ee81cf6ce417303425a24b7eef832433d7f9179..35aacdcfeb52865b639f91204ab4a1ab677162ea 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] = { |
{"", ""}, |