| Index: test/mjsunit/strict-mode.js
|
| diff --git a/test/mjsunit/strict-mode.js b/test/mjsunit/strict-mode.js
|
| index fcfe264e988471becfb6804ff10037d5201ea2ff..726996714c2c60281987564c753a0ea9c90aa224 100644
|
| --- a/test/mjsunit/strict-mode.js
|
| +++ b/test/mjsunit/strict-mode.js
|
| @@ -67,6 +67,9 @@ function CheckFunctionConstructorStrictMode() {
|
| with ({}) {};
|
| })();
|
|
|
| +// Incorrectly place 'use strict' directive.
|
| +assertThrows("function foo (x) 'use strict'; {}", SyntaxError);
|
| +
|
| // 'use strict' in non-directive position.
|
| (function UseStrictNonDirective() {
|
| void(0);
|
| @@ -319,14 +322,8 @@ CheckStrictMode("var variable; delete variable;", SyntaxError);
|
| +arguments, -arguments, ~arguments, !arguments];
|
| })();
|
|
|
| -// 7.6.1.2 Future Reserved Words
|
| -var future_reserved_words = [
|
| - "class",
|
| - "enum",
|
| - "export",
|
| - "extends",
|
| - "import",
|
| - "super",
|
| +// 7.6.1.2 Future Reserved Words in strict mode
|
| +var future_strict_reserved_words = [
|
| "implements",
|
| "interface",
|
| "let",
|
| @@ -337,14 +334,17 @@ var future_reserved_words = [
|
| "static",
|
| "yield" ];
|
|
|
| -function testFutureReservedWord(word) {
|
| +function testFutureStrictReservedWord(word) {
|
| // Simple use of each reserved word
|
| CheckStrictMode("var " + word + " = 1;", SyntaxError);
|
| + CheckStrictMode("typeof (" + word + ");", SyntaxError);
|
|
|
| // object literal properties
|
| eval("var x = { " + word + " : 42 };");
|
| eval("var x = { get " + word + " () {} };");
|
| eval("var x = { set " + word + " (value) {} };");
|
| + eval("var x = { get " + word + " () { 'use strict'; } };");
|
| + eval("var x = { set " + word + " (value) { 'use strict'; } };");
|
|
|
| // object literal with string literal property names
|
| eval("var x = { '" + word + "' : 42 };");
|
| @@ -364,7 +364,6 @@ function testFutureReservedWord(word) {
|
|
|
| // Function names and arguments when the body is strict
|
| assertThrows("function " + word + " () { 'use strict'; }", SyntaxError);
|
| - assertThrows("function foo (" + word + ") 'use strict'; {}", SyntaxError);
|
| assertThrows("function foo (" + word + ", " + word + ") { 'use strict'; }",
|
| SyntaxError);
|
| assertThrows("function foo (a, " + word + ") { 'use strict'; }", SyntaxError);
|
| @@ -375,16 +374,16 @@ function testFutureReservedWord(word) {
|
| SyntaxError);
|
|
|
| // get/set when the body is strict
|
| - eval("var x = { get " + word + " () { 'use strict'; } };");
|
| - eval("var x = { set " + word + " (value) { 'use strict'; } };");
|
| + // Getters don't have formal parameters, so particularly future reserved
|
| + // keywords are disallowed.
|
| assertThrows("var x = { get foo(" + word + ") { 'use strict'; } };",
|
| SyntaxError);
|
| assertThrows("var x = { set foo(" + word + ") { 'use strict'; } };",
|
| SyntaxError);
|
| }
|
|
|
| -for (var i = 0; i < future_reserved_words.length; i++) {
|
| - testFutureReservedWord(future_reserved_words[i]);
|
| +for (var i = 0; i < future_strict_reserved_words.length; i++) {
|
| + testFutureStrictReservedWord(future_strict_reserved_words[i]);
|
| }
|
|
|
| function testAssignToUndefined(test, should_throw) {
|
|
|