Add tests for iterator expression in ForIn/Of head

Although the `for..in` statement allows Expressions to define the
iterator, only an AssignmentExpression may occupy this position in the
`for..of` statement.
This commit is contained in:
Mike Pennisi 2016-01-19 12:27:33 -05:00
parent 4a862fba95
commit 19762b927a
6 changed files with 116 additions and 0 deletions

View File

@ -0,0 +1,25 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Expression is allowed in head
info: >
IterationStatement : for ( ForDeclaration in Expression ) Statement
1. Let keyResult be the result of performing
ForIn/OfHeadEvaluation(BoundNames of ForDeclaration, Expression,
enumerate).
2. ReturnIfAbrupt(keyResult).
3. Return ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult,
lexicalBinding, labelSet).
es6id: 13.7.5.11
---*/
var iterCount = 0;
for (let x in null, { key: 0 }) {
assert.sameValue(x, 'key');
iterCount += 1;
}
assert.sameValue(iterCount, 1);

View File

@ -0,0 +1,26 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Expression is allowed in head
info: >
IterationStatement : for ( ForDeclaration in Expression ) Statement
1. Let keyResult be the result of performing
ForIn/OfHeadEvaluation(BoundNames of ForDeclaration, Expression,
enumerate).
2. ReturnIfAbrupt(keyResult).
3. Return ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult,
lexicalBinding, labelSet).
es6id: 13.7.5.11
---*/
var iterCount = 0;
var x;
for (x in null, { key: 0 }) {
assert.sameValue(x, 'key');
iterCount += 1;
}
assert.sameValue(iterCount, 1);

View File

@ -0,0 +1,25 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Expression is allowed in head
info: >
IterationStatement : for ( ForDeclaration in Expression ) Statement
1. Let keyResult be the result of performing
ForIn/OfHeadEvaluation(BoundNames of ForDeclaration, Expression,
enumerate).
2. ReturnIfAbrupt(keyResult).
3. Return ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult,
lexicalBinding, labelSet).
es6id: 13.7.5.11
---*/
var iterCount = 0;
for (var x in null, { key: 0 }) {
assert.sameValue(x, 'key');
iterCount += 1;
}
assert.sameValue(iterCount, 1);

View File

@ -0,0 +1,13 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Expression not allowed in head's AssignmentExpression position
info: >
IterationStatement :
for ( ForDeclaration of AssignmentExpression ) Statement
es6id: 13.7
negative: SyntaxError
---*/
for (let x of [], []) {}

View File

@ -0,0 +1,14 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Expression not allowed in head's AssignmentExpression position
info: >
IterationStatement :
for ( LeftHandSideExpression of AssignmentExpression ) Statement
es6id: 13.7
negative: SyntaxError
---*/
var x;
for (x of [], []) {}

View File

@ -0,0 +1,13 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Expression not allowed in head's AssignmentExpression position
info: >
IterationStatement :
for ( var ForBinding of AssignmentExpression ) Statement
es6id: 13.7
negative: SyntaxError
---*/
for (var x of [], []) {}