summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/statements/let/syntax
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/language/statements/let/syntax')
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/browser.js0
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/escaped-let.js29
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/identifier-let-allowed-as-lefthandside-expression-strict-strict.js19
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/identifier-let-disallowed-as-boundname.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-closure-inside-condition.js14
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-closure-inside-initialization.js16
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-closure-inside-next-expression.js14
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-multi-let-binding.js18
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-single-let-binding.js16
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-let-declaration-split-across-two-lines.js34
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-let-declaration-with-initializer-split-across-two-lines.js34
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-newline-await-in-normal-function.js25
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-newline-yield-in-generator-function.js26
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-newline-yield-in-normal-function.js24
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let-outer-inner-let-bindings.js23
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/let.js26
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/shell.js0
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-case-expression-statement-list.js12
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-default-statement-list.js12
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-do-statement-while-expression.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-for-statement.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-if-expression-statement-else-statement.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-if-expression-statement.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-label-statement.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-while-expression-statement.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-case-expression-statement-list.js11
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-default-statement-list.js11
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-do-statement-while-expression.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-for-statement.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-if-expression-statement-else-statement.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-if-expression-statement.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-label-statement.js15
-rw-r--r--js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-while-expression-statement.js15
33 files changed, 559 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/statements/let/syntax/browser.js b/js/src/tests/test262/language/statements/let/syntax/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/browser.js
diff --git a/js/src/tests/test262/language/statements/let/syntax/escaped-let.js b/js/src/tests/test262/language/statements/let/syntax/escaped-let.js
new file mode 100644
index 0000000000..04c60ff840
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/escaped-let.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-grammar-notation
+description: >
+ The `let` contextual keyword must not contain Unicode escape sequences.
+info: |
+ Terminal symbols are shown
+ in fixed width font, both in the productions of the grammars and throughout this
+ specification whenever the text directly refers to such a terminal symbol. These
+ are to appear in a script exactly as written. All terminal symbol code points
+ specified in this way are to be understood as the appropriate Unicode code points
+ from the Basic Latin range, as opposed to any similar-looking code points from
+ other Unicode ranges.
+flags: [noStrict]
+---*/
+
+// Add a global property "let", so we won't get a runtime reference error below.
+this.let = 0;
+
+l\u0065t // ASI
+a;
+
+// If the parser treated the previous escaped "let" as a lexical declaration,
+// this variable declaration will result an early syntax error.
+var a;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/identifier-let-allowed-as-lefthandside-expression-strict-strict.js b/js/src/tests/test262/language/statements/let/syntax/identifier-let-allowed-as-lefthandside-expression-strict-strict.js
new file mode 100644
index 0000000000..3d8af4f80e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/identifier-let-allowed-as-lefthandside-expression-strict-strict.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.6.0.1
+description: >
+ for declaration:
+ identifier "let" disallowed as lefthandside expression in strict mode
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+var o = { a: 1 };
+for (let in o) { }
+
diff --git a/js/src/tests/test262/language/statements/let/syntax/identifier-let-disallowed-as-boundname.js b/js/src/tests/test262/language/statements/let/syntax/identifier-let-disallowed-as-boundname.js
new file mode 100644
index 0000000000..f93207d844
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/identifier-let-disallowed-as-boundname.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.6.4.1
+description: >
+ It is a Syntax Error if the BoundNames of ForDeclaration contains "let".
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+for (let let in {}) { }
+
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-closure-inside-condition.js b/js/src/tests/test262/language/statements/let/syntax/let-closure-inside-condition.js
new file mode 100644
index 0000000000..e0d20e129e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-closure-inside-condition.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let: closure inside for loop condition
+---*/
+let a = [];
+for (let i = 0; a.push(function () { return i; }), i < 5; ++i) { }
+for (let k = 0; k < 5; ++k) {
+ assert.sameValue(k, a[k]());
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-closure-inside-initialization.js b/js/src/tests/test262/language/statements/let/syntax/let-closure-inside-initialization.js
new file mode 100644
index 0000000000..29322ec1e1
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-closure-inside-initialization.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let: closure inside for loop initialization
+---*/
+let a = [];
+for (let i = 0, f = function() { return i }; i < 5; ++i) {
+ a.push(f);
+}
+for (let k = 0; k < 5; ++k) {
+ assert.sameValue(0, a[k]());
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-closure-inside-next-expression.js b/js/src/tests/test262/language/statements/let/syntax/let-closure-inside-next-expression.js
new file mode 100644
index 0000000000..e2d7a08ead
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-closure-inside-next-expression.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let: closure inside for loop next-expression
+---*/
+let a = [];
+for (let i = 0; i < 5; a.push(function () { return i; }), ++i) { }
+for (let k = 0; k < 5; ++k) {
+ assert.sameValue(k + 1, a[k]());
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-multi-let-binding.js b/js/src/tests/test262/language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-multi-let-binding.js
new file mode 100644
index 0000000000..99b7421991
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-multi-let-binding.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ In a normal for statement the iteration variable is freshly allocated for each iteration. Multi let binding
+---*/
+let a = [], b = [];
+for (let i = 0, j = 10; i < 5; ++i, ++j) {
+ a.push(function () { return i; });
+ b.push(function () { return j; });
+}
+for (let k = 0; k < 5; ++k) {
+ assert.sameValue(k, a[k]());
+ assert.sameValue(k + 10, b[k]());
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-single-let-binding.js b/js/src/tests/test262/language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-single-let-binding.js
new file mode 100644
index 0000000000..33cc84c50a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-iteration-variable-is-freshly-allocated-for-each-iteration-single-let-binding.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ In a normal for statement the iteration variable is freshly allocated for each iteration. Single let binding
+---*/
+let a = [];
+for (let i = 0; i < 5; ++i) {
+ a.push(function () { return i; });
+}
+for (let j = 0; j < 5; ++j) {
+ assert.sameValue(j, a[j]());
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-let-declaration-split-across-two-lines.js b/js/src/tests/test262/language/statements/let/syntax/let-let-declaration-split-across-two-lines.js
new file mode 100644
index 0000000000..ffc309bf53
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-let-declaration-split-across-two-lines.js
@@ -0,0 +1,34 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Jeff Walden
+es6id: 13.3.1.1
+description: >
+ let: |let let| split across two lines is not subject to automatic semicolon insertion.
+info: |
+ |let| followed by a name is a lexical declaration. This is so even if the
+ name is on a new line. ASI applies *only* if an offending token not allowed
+ by the grammar is encountered, and there's no [no LineTerminator here]
+ restriction in LexicalDeclaration or ForDeclaration forbidding a line break.
+
+ It's a tricky point, but this is true *even if* the name is "let", a name that
+ can't be bound by LexicalDeclaration or ForDeclaration. Per 5.3, static
+ semantics early errors are validated *after* determining productions matching
+ the source text.
+
+ So in this testcase, the eval text matches LexicalDeclaration. No ASI occurs,
+ because "let\nlet = ..." matches LexicalDeclaration before static semantics
+ are considered. *Then* 13.3.1.1's static semantics for the LexicalDeclaration
+ just chosen, per 5.3, are validated to recognize the Script as invalid. Thus
+ the eval script can't be evaluated, and a SyntaxError is thrown.
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+let // start of a LexicalDeclaration, *not* an ASI opportunity
+let;
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-let-declaration-with-initializer-split-across-two-lines.js b/js/src/tests/test262/language/statements/let/syntax/let-let-declaration-with-initializer-split-across-two-lines.js
new file mode 100644
index 0000000000..28d5758eb9
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-let-declaration-with-initializer-split-across-two-lines.js
@@ -0,0 +1,34 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Jeff Walden
+es6id: 13.3.1.1
+description: >
+ let: |let let| split across two lines is not subject to automatic semicolon insertion.
+info: |
+ |let| followed by a name is a lexical declaration. This is so even if the
+ name is on a new line. ASI applies *only* if an offending token not allowed
+ by the grammar is encountered, and there's no [no LineTerminator here]
+ restriction in LexicalDeclaration or ForDeclaration forbidding a line break.
+
+ It's a tricky point, but this is true *even if* the name is "let", a name that
+ can't be bound by LexicalDeclaration or ForDeclaration. Per 5.3, static
+ semantics early errors are validated *after* determining productions matching
+ the source text.
+
+ So in this testcase, the eval text matches LexicalDeclaration. No ASI occurs,
+ because "let\nlet = ..." matches LexicalDeclaration before static semantics
+ are considered. *Then* 13.3.1.1's static semantics for the LexicalDeclaration
+ just chosen, per 5.3, are validated to recognize the Script as invalid. Thus
+ the eval script can't be evaluated, and a SyntaxError is thrown.
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+let // start of a LexicalDeclaration, *not* an ASI opportunity
+let = "irrelevant initializer";
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-newline-await-in-normal-function.js b/js/src/tests/test262/language/statements/let/syntax/let-newline-await-in-normal-function.js
new file mode 100644
index 0000000000..aa3735d09a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-newline-await-in-normal-function.js
@@ -0,0 +1,25 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Jeff Walden <jwalden+code@mit.edu>
+esid: sec-let-and-const-declarations
+description: >
+ `let await` does not permit ASI in between, as `await` is a BindingIdentifier
+info: |
+ `await` is a perfectly cromulent binding name in any context grammatically, just
+ prohibited by static semantics in some contexts. Therefore ASI can never apply
+ between `let` (where a LexicalDeclaration is permitted) and `await`,
+ so a subsequent `0` where `=` was expected is a syntax error.
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+function f() {
+ let
+ await 0;
+}
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-newline-yield-in-generator-function.js b/js/src/tests/test262/language/statements/let/syntax/let-newline-yield-in-generator-function.js
new file mode 100644
index 0000000000..86a3c429bf
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-newline-yield-in-generator-function.js
@@ -0,0 +1,26 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Jeff Walden <jwalden+code@mit.edu>
+esid: sec-let-and-const-declarations
+description: >
+ `let yield` does not permit ASI in between, as `yield` is a BindingIdentifier
+info: |
+ `yield` is a perfectly cromulent binding name in any context grammatically, just
+ prohibited by static semantics in some contexts. Therefore ASI can never apply
+ between `let` (where a LexicalDeclaration is permitted) and `yield`,
+ so a subsequent `0` where `=` was expected is a syntax error.
+negative:
+ phase: parse
+ type: SyntaxError
+features: [generators]
+---*/
+
+$DONOTEVALUATE();
+
+function* f() {
+ let
+ yield 0;
+}
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-newline-yield-in-normal-function.js b/js/src/tests/test262/language/statements/let/syntax/let-newline-yield-in-normal-function.js
new file mode 100644
index 0000000000..fdf257f95f
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-newline-yield-in-normal-function.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-let-and-const-declarations
+description: >
+ `let yield` does not permit ASI in between, as `yield` is a BindingIdentifier
+info: |
+ `yield` is a perfectly cromulent binding name in any context grammatically, just
+ prohibited by static semantics in some contexts. Therefore ASI can never apply
+ between `let` (where a LexicalDeclaration is permitted) and `yield`,
+ so a subsequent `0` where `=` was expected is a syntax error.
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+function f() {
+ let
+ yield 0;
+}
diff --git a/js/src/tests/test262/language/statements/let/syntax/let-outer-inner-let-bindings.js b/js/src/tests/test262/language/statements/let/syntax/let-outer-inner-let-bindings.js
new file mode 100644
index 0000000000..ece8f016ef
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let-outer-inner-let-bindings.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ outer let binding unchanged by for-loop let binding
+---*/
+//
+
+let x = "outer_x";
+let y = "outer_y";
+
+for (let x = "inner_x", i = 0; i < 1; i++) {
+ let y = "inner_y";
+
+ assert.sameValue(x, "inner_x");
+ assert.sameValue(y, "inner_y");
+}
+assert.sameValue(x, "outer_x");
+assert.sameValue(y, "outer_y");
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/let.js b/js/src/tests/test262/language/statements/let/syntax/let.js
new file mode 100644
index 0000000000..cf9bd1b53c
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/let.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ global and block scope let
+---*/
+let x;
+let y = 2;
+
+// Block local
+{
+ let y;
+ let x = 3;
+}
+
+assert.sameValue(x, undefined);
+assert.sameValue(y, 2);
+
+if (true) {
+ let y;
+ assert.sameValue(y, undefined);
+}
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/shell.js b/js/src/tests/test262/language/statements/let/syntax/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/shell.js
diff --git a/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-case-expression-statement-list.js b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-case-expression-statement-list.js
new file mode 100644
index 0000000000..79a17ed3c4
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-case-expression-statement-list.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations with initialisers in statement positions:
+ case Expression : StatementList
+---*/
+switch (true) { case true: let x = 1; }
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-default-statement-list.js b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-default-statement-list.js
new file mode 100644
index 0000000000..0788ee9d8d
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-default-statement-list.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations with initialisers in statement positions:
+ default : StatementList
+---*/
+switch (true) { default: let x = 1; }
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-do-statement-while-expression.js b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-do-statement-while-expression.js
new file mode 100644
index 0000000000..f452223e92
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-do-statement-while-expression.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations with initialisers in statement positions:
+ do Statement while ( Expression )
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+do let x = 1; while (false)
diff --git a/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-for-statement.js b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-for-statement.js
new file mode 100644
index 0000000000..cc0d1cd796
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-for-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations with initialisers in statement positions:
+ for ( ;;) Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+for (;false;) let x = 1;
diff --git a/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-if-expression-statement-else-statement.js b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-if-expression-statement-else-statement.js
new file mode 100644
index 0000000000..72ef204832
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-if-expression-statement-else-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations with initialisers in statement positions:
+ if ( Expression ) Statement else Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+if (true) {} else let x = 1;
diff --git a/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-if-expression-statement.js b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-if-expression-statement.js
new file mode 100644
index 0000000000..f0b34129e5
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-if-expression-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations with initialisers in statement positions:
+ if ( Expression ) Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+if (true) let x = 1;
diff --git a/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-label-statement.js b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-label-statement.js
new file mode 100644
index 0000000000..55336769c3
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-label-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations with initialisers in statement positions:
+ label: Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+label: let x = 1;
diff --git a/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-while-expression-statement.js b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-while-expression-statement.js
new file mode 100644
index 0000000000..eb2f85897e
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/with-initialisers-in-statement-positions-while-expression-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations with initialisers in statement positions:
+ while ( Expression ) Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+while (false) let x = 1;
diff --git a/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-case-expression-statement-list.js b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-case-expression-statement-list.js
new file mode 100644
index 0000000000..089beebeb3
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-case-expression-statement-list.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations without initialisers in statement positions:
+ case Expression : StatementList
+---*/
+switch (true) { case true: let x; }
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-default-statement-list.js b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-default-statement-list.js
new file mode 100644
index 0000000000..128f3cb6ad
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-default-statement-list.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations without initialisers in statement positions:
+ default : StatementList
+---*/
+switch (true) { default: let x; }
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-do-statement-while-expression.js b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-do-statement-while-expression.js
new file mode 100644
index 0000000000..568b4463b5
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-do-statement-while-expression.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations without initialisers in statement positions:
+ do Statement while ( Expression )
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+do let x; while (false)
diff --git a/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-for-statement.js b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-for-statement.js
new file mode 100644
index 0000000000..1730e07c1a
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-for-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations without initialisers in statement positions:
+ for ( ;;) Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+for (;false;) let x;
diff --git a/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-if-expression-statement-else-statement.js b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-if-expression-statement-else-statement.js
new file mode 100644
index 0000000000..bf634c5103
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-if-expression-statement-else-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations without initialisers in statement positions:
+ if ( Expression ) Statement else Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+if (true) {} else let x;
diff --git a/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-if-expression-statement.js b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-if-expression-statement.js
new file mode 100644
index 0000000000..8c9ad1e56b
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-if-expression-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations without initialisers in statement positions:
+ if ( Expression ) Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+if (true) let x;
diff --git a/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-label-statement.js b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-label-statement.js
new file mode 100644
index 0000000000..7298a666ad
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-label-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations without initialisers in statement positions:
+ label: Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+label: let x;
diff --git a/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-while-expression-statement.js b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-while-expression-statement.js
new file mode 100644
index 0000000000..705e47e5d6
--- /dev/null
+++ b/js/src/tests/test262/language/statements/let/syntax/without-initialisers-in-statement-positions-while-expression-statement.js
@@ -0,0 +1,15 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2011 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 13.1
+description: >
+ let declarations without initialisers in statement positions:
+ while ( Expression ) Statement
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+while (false) let x;